#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, вот что я добавил :
- СПА убедитесь, что вы установили
withCredentials
заголовок вtrue
- 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-это ожидаемый ответ от сервера.