Laravel sanctum как совмещать middleware для авторизованного и неавторизованого по токену пользователя?

Рейтинг: 1Ответов: 1Опубликовано: 02.03.2023

Допустим у меня есть маршрут в routes/api.php

/api/example

По этому маршруту есть контент и он отличается в зависимости от того, авторизовался пользователь или нет. Если я защищаю его стандартно через auth:sanctum, то контент по этому маршруту может получить только авторизированый по токену пользователь, все остальные получат 401 ответ сервера. Но тогда мне прийдётся создавать 2 отдельных маршрута, один защищенный, а другой нет, что бы предоставить доступ для неавторизованного пользователя. Вопрос, как можно совместить в одном маршруте контент для авторизованного и неавторизованного пользователя, ведь куки не получается отправить с мобильного приложения.

Route::middleware('auth:sanctum')->post('/example', ExampleController::class );

Ответы

▲ 0

Можно использовать мидлвару auth

Route::middleware('auth')->post('/api/example', ExampleController::class );

и внутри контролера проверять через Auth::check();

чтобы это cработало надо в конфигах /app/auth.php

заменить дефолтный guard

'defaults' => [
    // 'guard' => 'web',
    'guard' => 'sanctum',
    'passwords' => 'users',
],