Я пытаюсь разрешить моим пользователям после входа в систему использовать мой собственный API через Javasscript, как описано там https://laravel.com/docs/5.7/passport#consuming-your-api-with-javascript
Я установил паспорт. Мое веб-промежуточное программное обеспечение определяется как
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Barryvdh\Cors\HandleCors::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\SetLocale::class,
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
Я вижу, что cookie "laravel_token" действительно создается после входа в систему.
Затем я попытался отправить простой запрос get на маршрут API
window.$.ajax({
headers: {
'Accept': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: 'GET',
url: 'https://mywebsite.test/api/testApi',
success: function (response) {
console.log(response);
},
error: function (xhr) {
console.error(xhr.responseText);
}
});
Единственный ответ, который мне удалось получить, это
{"message":"Unauthenticated."}
Что я мог пропустить?
Обновление
Запрос выполняется с субдомена client.mywebsite.test, и после расследования возникает проблема. Аутентификация работает хорошо при выполнении вызова ajax от mywebsite.test. Как я могу это исправить для субдомена?
Запросить заголовки при запросе с субдомена:
OPTIONS /api/testApi HTTP/1.1
Host: mywebsite.test
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: https://client.mywebsite.test
Access-Control-Request-Headers: x-csrf-token,x-requested-with
Accept: */*
Referer: https://client.mywebsite.test/home
Запросить заголовки при запросе с домена:
GET /api/testApi HTTP/1.1
Host: mywebsite.test
Connection: keep-alive
X-CSRF-TOKEN: fLTkaq9p62FROutzch2iE9IF864al8adFnxptbve
X-Requested-With: XMLHttpRequest
Cookie: laravel_token=[...]; XSRF-TOKEN=[...]; mywebsite_session=[...];