私はLaravel Sanctum with Vuejs SPAを使用しています。両方とも同じトップレベルドメインにあります
Laravel backend : app.demo.localhost
Vue SPA : app-spa.demo.localhost
Axiosを使用してVueJS SPAから呼び出され、XSRF-TOKENが正常に設定されている場合、ログインとログアウト(エンドポイント)は正しく機能していますが、他のapiエンドポイントを呼び出すと、401が無許可になります。
Axiosではこれが設定されています
axios.defaults.withCredentials = true;
以下の構成があります
Laravel .env
SESSION_DRIVER=cookie
SESSION_DOMAIN=.demo.localhost
SANCTUM_STATEFUL_DOMAINS=app-spa.demo.localhost
Routes/Api.php
Route::middleware('auth:sanctum')->get('api/user', function (Request $request) {
return $request->user();
});
Cors.php内
'paths' => ['api/*', 'sanctum/csrf-cookie', 'login', 'logout'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
誰かが私を助けてくれませんか?
同じ問題が発生しました。公式ドキュメントに従ってすべてのオプションを構成しましたが、認証を取得できませんでした。
次に、routes/api.phpではなく、routes/web.phpを使用するので、sanctumミドルウェアを非常にうまく使用できます。
これで問題は明白になりました。AxioswithCredentialsは正しい方法で配置する必要があるかもしれません。
const http = axios.create({
baseURL: API_URL,
withCredentials: true
})
うまくいかないかもしれません。だから私は{withCredentials: true}
お気に入り
http.get('/api/whoami', {withCredentials: true})
.then(res => {
console.log(res.data)
})
その後、動作します。
しかし、非常に奇妙なことは、私がブラウザのキャッシュ、Cookie、またはLaravelのさまざまなキャッシュをクリアしたかどうかに関係なく、現在は正常であることです。以前の状況はありません