我的 SPA 與我的 laravel 應用程式在同一個存盤庫中,并且檔案指出,當使用 sanctum 時,您的 SPA 的“登錄”頁面應首先向/sanctum/csrf-cookie端點發出請求以初始化應用程式的 CSRF 保護。鏈接:https ://laravel.com/docs/9.x/sanctum#spa-authenticating
就我而言,當我成功注冊用戶時,我不會將他們重定向到登錄頁面進行登錄,而是重定向到他們的儀表板。因此,根據我對上述觀點的理解,我認為我應該首先向端點發出請求,然后/sanctum/csrf-cookie再向端點發出post請求,register api這樣我們就有一個登錄用戶可以免受 CSRF 攻擊,但我不是確定我是否正確解釋了文本。
我的方法
public function register(Request $request){
$fields = $request->validate([
'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed',
]);
$fields['password'] = bcrypt($fields['password']);
$user = User::create($fields);
auth()->login($user);
}
uj5u.com熱心網友回復:
我進一步調查了這個問題,發現/sanctum/csrf-cookie端點實際上只回傳一個 204 空內容。你可以在這里查看:
https://github.com/laravel/sanctum/blob/5a602d520474e103174900301d7b791e6d7cd953/src/Http/Controllers/CsrfCookieController.php#L12
return new JsonResponse(null, 204);
檔案中的評論說:
回傳一個空回應只是為了觸發 CSRF cookie 在瀏覽器中的存盤。
實際上,您可以從您的 SPA 呼叫任何 GET API 端點,它會回傳 CSRF cookie。基本上你只需要在呼叫任何 POST 端點之前呼叫一次 GET 端點,包括登錄端點,它應該是 POST。
原因是當您呼叫 SPA 的 GET 端點(使用相同的主機或相同的子主機)時,sanctum 默認回傳一個 CSRF cookie。
因此,對于大多數用例,您可能不需要/sanctum/csrf-cookie在登錄之前呼叫端點,因為在此之前您可能已經呼叫了 GET 端點。但是,如果登錄或任何其他 POST 端點是您呼叫的第一個端點,您首先需要呼叫上述 GET 端點以觸發 CSRF cookie 在瀏覽器中的存盤。
檔案對此不是很清楚,我正在嘗試提交 PR 來解決這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/473066.html
標籤:拉拉维尔 Vue.js laravel-sanctum
