Как выбрать охранника для сессионного драйвера - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь создать страницу входа с веб-маршрутом laravel. Когда пользователь входит в систему, запись сеанса будет сохранена в базе данных. Но в таблице сеанса user_id всегда получает значение null. Я обнаружил, что в Illuminate\Session\DatabaseSessionHandler функция userId() всегда возвращает null. Это потому, что я установил guard по умолчанию для api. Это мой config/auth.php:

    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],

Когда я меняю защиту по умолчанию на web, столбец user_id в базе данных имеет значение авторизованного идентификатора пользователя. Я не хочу менять охрану по умолчанию на web.

Как я могу установить драйвер охранника для сеанса? Есть что-то вроде Auth, можно использовать Auth::guard('web').

Спасибо

1 Ответ

0 голосов
/ 03 августа 2020

Обычно API-интерфейсы не связаны с сохранением состояния сеанса между запросами.

Вы всегда можете добавить дополнительные группы с отдельными охранниками к одним и тем же маршрутам и использовать их в соответствии с вашими потребностями. Например,

Route::group(['middleware' => 'auth:api'], function () {
    Route::post('/user', 'UserController@apiUser');
}

Route::group(['middleware' => 'auth'], function () {
    Route::post('/user', 'UserController@index');
}

, а затем отдельно ссылка

$user = auth('web')->user();

или

$user = auth('api')->user();

Прочтите здесь для реализации Laravel API с использованием Passport . Вы также можете рассмотреть Laravel Sanctum , который предлагает поддержку генерации токенов API для ваших пользователей.

...