Изменить таблицу пользователей с помощью святилища

Есть ли у кого-нибудь идея, как использовать таблицу кандидатов (например) вместо таблицы пользователей с laravel Sanctum?

Я попытался добавить это в auth.php, но это не сработало.

   'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'sanctum',
            'provider' => 'applicants',
        ],
    ],

'providers' => [
       'users' => [
           'driver' => 'eloquent',
           'model' => env('AUTH_MODEL', App\Models\User::class),
       ],

       'applicants' => [
           'driver' => 'eloquent',
           'model' => env('AUTH_MODEL', App\Models\API\Applicant::class),
       ],
   ],

Какую версию Laravel вы используете? Что у вас не заработало после данной настройки? Уточните.

Subha 05.06.2024 20:00

Я использую laravel 11, когда я пытаюсь использовать Auth::attempt(), я ищу пользователя в таблице пользователей, а не в таблице кандидатов.

Abdelfattah Omar 06.06.2024 10:06

Хорошо, вы хотите найти пользователя из таблицы applicants. Верно?

Subha 06.06.2024 10:18

да, я хочу аутентифицировать их из applicants Я использую это в функции входа в систему: ``` if (Auth::attempt(['mobile' => $data['mobile'], 'password' => $data[' пароль']])) { $applicant = Auth::user(); $data['token'] = $applicant->createToken('API Token')->plainTextToken; }else { ```

Abdelfattah Omar 06.06.2024 10:27

Хорошо, я опубликовал свой ответ. Пожалуйста, проверьте и дайте мне знать, работает ли он. Спасибо.

Subha 06.06.2024 10:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
5
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете использовать env('AUTH_MODEL'.. для двух разных классов моделей.

Вместо вашего кода попробуйте этот для провайдеров applicants.

'providers' => [
       'users' => [
           'driver' => 'eloquent',
           'model' => env('AUTH_MODEL', App\Models\User::class),
       ],

       'applicants' => [
           'driver' => 'eloquent',
           'model' => App\Models\API\Applicant::class,
       ],
   ],

И в свой guards добавьте providers имя applicants, а не applicant.

В laravel 11 по умолчанию охранник users. Итак, в случае custom-guard (в вашем случае api, который указывает на applicants провайдеров) сделайте это для аутентификации пользователей.

if (Auth::guard('api')->attempt(['mobile' => $data['mobile'], 'password' => $data['password']])) 
{ 
  $applicant = Auth::guard('api')->user(); 
  $data['token'] = $applicant->createToken('API Token')->plainTextToken; 
}
else 
{
....
}

Попробуйте это, это сработает.

В случае возникновения каких-либо других проблем, связанных с аутентификацией sanctum, вы можете воспользоваться руководством по этой ссылке.

https://github.com/savanihd/Laravel-11-REST-API-using-Sanctum/blob/main/config/auth.php

Для получения дополнительной информации о конфигурации custom-guard и о том, как к ней будет доступ, вы можете перейти по ссылке на официальную документацию, приведенной ниже.

https://laravel.com/docs/11.x/authentication#accessing-specific-guard-instances

Спасибо за ваш ответ и время, но сейчас я получаю эту ошибку: BadMethodCallException: метод Illuminate\Auth\RequestGuard::attempt не существует

Abdelfattah Omar 06.06.2024 10:53

` 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'session', 'provider ' => 'applicants', ], ], ` ну, вот я сменил драйвер API с святилища на сеанс, и теперь он работает нормально, но правильно ли это делать ??

Abdelfattah Omar 06.06.2024 10:56

@AbdelfattahOmar, Да, 100% соответствует документации. Я редактирую свой ответ и предоставляю официальную ссылку на документ, где вы можете узнать больше. Пожалуйста, проголосуйте и примите мой ответ. Спасибо.

Subha 06.06.2024 10:58

ну, есть что-то в том, что нужно 15 репутаций, чтобы проголосовать, но правда спасибо, я очень ценю вашу помощь

Abdelfattah Omar 06.06.2024 11:04

Чтобы проголосовать за, вам нужно 15 репутации, но чтобы принять ответ, я не думаю, что есть какое-либо ограничение. Кстати, без проблем, спасибо.

Subha 06.06.2024 11:08

Вы можете проверить общую ссылку на GitHub в моем ответе, чтобы узнать подробности об аутентификации святилища.

Subha 06.06.2024 11:09

Другие вопросы по теме