Laravel Sanctum — святилище/csrf-cookie (204 «Без содержимого»)

#laravel #vue.js #cookies #laravel-sanctum #laravel-api

Вопрос:

Laravel sanctum был для меня немного головной болью, так как я потратил несколько часов, пытаясь понять, почему sanctum/csrf-cookie route не возвращает контент. изначально тот же маршрут возврата 404 не найден, но после добавления 'prefix' => 'api/sanctum' config/sanctum.php кажется, это работает, за исключением того, что он ничего не выводит и в моем браузере не установлен файл cookie.

Вот некоторые из моих кодов

.env

 SANCTUM_STATEFUL_DOMAINS=localhost:8080
SPA_URL=http://localhost:8080
SESSION_DOMAIN=localhost
 

—config/cors.php

 'paths' => [
        'api/*',
        'login',
        'logout',
        'register',
        'user/password',
        'forgot-password',
        'reset-password',
        'sanctum/csrf-cookie',
        'user/profile-information',
        'email/verification-notification',
      ],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,
 

аксиос

 export const authClient = axios.create({
  baseURL: process.env.VUE_APP_API_URL,
  withCredentials: true, // required to handle the CSRF token
});
 

и сделав все это, если бы я попытался сгенерировать токен с помощью

 axios.get('/sanctum/csrf-cookie').then(response => {
    // Login...
});
 

я получаю 204 no content ответ
, я также добавил промежуточное ПО api в kernel.php как указано в инструкции по удвоению, но все равно не установит файл cookie. и когда я пытаюсь сделать запрос на другой маршрут, защищенный святилищем i 419 token mismatch .
я также запустил новую установку laravel php artisan optimize , очистил свою историю брауэра , проверил конечные точки в postman, но все равно эти же 204 and 419 исключения

Ответ №1:

Я боролся с одной и той же проблемой в течение нескольких дней, а затем основал способ, который сработал. так :

'/sanctum/csrf-cookie' Маршрут возвращает ответ 204 при успешном выполнении, после чего вам необходимо отправить post запрос с учетными данными. раньше я получал статус ответа 419.

итак, после того, как я следил за документами laravel, вот что я добавил :

  1. СПА убедитесь, что вы установили withCredentials заголовок в true
  2. API

.env

 SESSION_DRIVER=cookie
SESSION_DOMAIN='.localhost'
SANCTUM_STATEFUL_DOMAINS='localhost,127.0.0.1'
 

.kernel.php

добавьте в свой массив промежуточного программного обеспечения : IlluminateSessionMiddlewareStartSession::class

Ответ №2:

Из спецификации HTTP:

Код ответа HTTP 204 «Состояние успеха без содержимого» указывает, что запрос выполнен успешно, но клиенту не нужно переходить со своей текущей страницы. Это может быть использовано, например, при реализации функции «сохранить и продолжить редактирование» для вики-сайта.

В соответствии со спецификацией 204-это ожидаемый ответ от сервера.