互聯網上有很多與此相關的帖子,所以如果我錯過了這里的答案,我深表歉意,但即使在查看了所有現有答案之后,我似乎也在繞圈子。我顯然忽略了一些東西。
我有一個 Laravel 應用程式,它最近從 6 升級到 8,它在本地提供api.company-name.local。我還有一個單獨的 Vue 前端 SPA 在app.company-name.local:8080. 獲取 cookie 后,我似乎得到了成功的回應,但是當我點擊登錄端點時,我得到了419 - CSRF Token Mismatch回應。
設定
Laravel 應用程式使用 Docker 在本地進行容器化,前端只是簡單地提供服務npm run serve,我的 hosts 檔案中有以下條目:
127.0.0.1 api.company-name.local
127.0.0.1 app.company-name.local
前端
我api.company-name.local/sanctum/csrf-cookie從回傳 204 回應的前端應用程式中發出請求,然后向我的登錄端點發出 POST 請求以對用戶進行身份驗證。
const login = async () => {
await axios.get('/sanctum/csrf-cookie')
.then(() => {
axios.post('/loginUser', {
username: 'my-username',
password: 'my-password',
})
})
}
觀察登錄 POST 請求,我可以看到請求標頭中發送了兩個 cookie。
在我的main.ts檔案中,我配置了以下 axios 默認值:
axios.defaults.withCredentials = true
axios.defaults.baseURL = 'http://api.my-company.local'
后端
我已將我的.env檔案更新為以下內容:
SESSION_DRIVER=cookie
SESSION_DOMAIN=app.company-name.local (have also tried .company-name.local)
SANCTUM_STATEFUL_DOMAINS=app.company-name.local:8080
我已將適當的中間件添加到內核中:
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
我的cors.php檔案更新了以下詳細資訊:
'paths' => [
'api/*',
'sanctum/csrf-cookie',
'/loginUser',
'/logout',
],
'supports_credentials' => true,
當用戶點擊該登錄端點時,他們將點擊這個使用 Web 中間件的特定路由設定:
Route::group([
'module' => 'Users',
'middleware' => ['web'],
], function () {
Route::post('/loginUser', 'UsersController@login');
});
我在這里改變什么似乎并不重要,我仍然以 419 結束,所以我在這里遺漏了一些東西。任何人都可以闡明問題可能是什么?
uj5u.com熱心網友回復:
使用包
composer require gcorp_llc/cors
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418946.html
標籤:
