gpt4 book ai didi

vue.js - vue-cli 前端没有从 Sanctum 设置 CSRF cookie

转载 作者:行者123 更新时间:2023-12-04 10:05:09 25 4
gpt4 key购买 nike

我正在使用 Vue 开发一个新的前端来访问我现有的 Laravel 7 应用程序,该应用程序使用 Sanctum 进行身份验证。

前端位于 app.example.com,后端移动到 api.example.com。 CORS 中间件和 Sanctum 已正确配置为允许 app.example.com,到目前为止一切顺利。

GET 到 /sanctum/csrf-cookie看起来不错,但是,它似乎并没有真正设置 cookie,导致对 API 的后续请求返回 419。

const config = { withCredentials: true };
const api = process.env.NODE_ENV === 'production' ? 'https://api.example.com' : 'http://localhost:9000';

axios.get(api + '/sanctum/csrf-cookie', config)
.then(() => axios.post(api + '/login', data, config))
.then(response => response.json())
.then(response => { console.log('json', response); });

控制台日志:
enter image description here

来自/sanctum/csrf-cookie 的响应头:
response from /sanctum/csrf-cookie

devtools 中没有列出 cookie:
enter image description here

更新 1 : 之前没注意到;每个旁边的警告图标 Set-Cookie在响应 header 中显示“此 set-cookie 的域属性对于当前主机 url 无效。”

最佳答案

简答 : 不应在 cookie 域属性中指定端口。

长答案 :Laravel Sanctum 使用 VerifyCsrfToken中间件发送和验证 CSRF token ,其中 uses session config values when adding the cookie to the response :

protected function addCookieToResponse($request, $response)
{
$config = config('session');

if ($response instanceof Responsable) {
$response = $response->toResponse($request);
}

$response->headers->setCookie(
new Cookie(
'XSRF-TOKEN', $request->session()->token(), $this->availableAt(60 * $config['lifetime']),
$config['path'], $config['domain'], $config['secure'], false, false, $config['same_site'] ?? null
)
);

return $response;
}

config/session.php :

'domain' => env('SESSION_DOMAIN', null),

.env :
SESSION_DOMAIN=localhost:8080

Cookies on the same host ARE NOT distinguishable by ports .因为我在 cookie 域中指定了端口,所以浏览器将 cookie 标记为具有无效域。删除端口就成功了。

关于vue.js - vue-cli 前端没有从 Sanctum 设置 CSRF cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61622938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com