web-dev-qa-db-ja.com

Laravel sanctumで401を無許可にする

私は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のさまざまなキャッシュをクリアしたかどうかに関係なく、現在は正常であることです。以前の状況はありません

0
Hwong Alex