Заменяет ли святилище Laraven аутентификацию по умолчанию?

#laravel #laravel-sanctum

Вопрос:

Я просматривал много вопросов, связанных с использованием multi-auth, sanctum и SPA. Я также несколько раз читал документацию. Я в замешательстве от того, как это работает.

В настоящее время у меня есть 2 группы маршрутов: web и api . Веб-группа выводит различные шаблоны HTML и интерфейсный контент и т. Д., А маршрут API генерирует контент, который используется для заполнения этих шаблонов.

У меня также есть 2 разных типа пользователей, admins и clients . Каждый из них имеет доступ к определенным маршрутам web и api .

Я использую 2 охранника для защиты web маршрутов, что работает просто отлично:

 'guards' => [
    'admin'        => [
        'driver'   => 'session',
        'provider' => 'admins',
    ],
    'client'        => [
        'driver'   => 'session',
        'provider' => 'clients',
    ],
],
 

И поставщики:

 'providers' => [
    'admins'    => [
        'driver' => 'eloquent',
        'model'  => AppModelsAdmin::class,
    ],
    'clients'    => [
        'driver' => 'eloquent',
        'model'  => AppModelsClient::class,
    ],
],
 

Теперь у меня возникли проблемы с защитой маршрутов API. Я следовал инструкциям, установил X-XSRF-TOKEN заголовок, добавил святилище в промежуточные программы, но я всегда получаю ответ 401. Я не знаю, как настроить своих охранников. Должен ли я добавить еще 2 охранника в массив? Такие как:

 'guards' => [
    // Web
    'admin'        => [
        'driver'   => 'session',
        'provider' => 'admins',
    ],
    'client'        => [
        'driver'   => 'session',
        'provider' => 'clients',
    ],
    // API
    'sanctum_admin'     => [
        'driver'   => 'sanctum',
        'provider' => 'admins',
    ],
    'sanctum_client'    => [
        'driver'   => 'sanctum',
        'provider' => 'clients',
    ],
],
 

А затем использовать добавление auth:sanctum_admin промежуточного программного обеспечения к моим маршрутам API? Потому что это тоже не работает. Должен ли я удалить первоначальную охрану и использовать только святилище? Возможно ли вообще иметь несколько охранников как для Интернета, так и для API? Действительно запутался в том, как это работает. Любая помощь приветствуется.

Комментарии:

1. Я почти уверен, что вы смешиваете авторизацию API с аутентификацией пользователя. Я считаю, что по умолчанию API-маршруты не используют сеансы и нуждаются в использовании API-токенов. Не уверен на 100%, еще не играл с sanctum

2. Sanctum предоставляет 2 метода аутентификации: на основе файлов cookie и на основе токенов. Я использую метод на основе файлов cookie, который использует X-XSRF-TOKEN файлы cookie для аутентификации пользователя.

3. Просто быстро просматриваю документы, но вы добавили группу api промежуточного app/Http/Kernel.php программного обеспечения, как указано в документах?

4. Да, я несколько раз следовал этим шагам. Я думаю, что проблема может быть связана с несколькими охранниками, поскольку охранники жестко закодированы в guard свойствах каждой модели. Я не уверен.