【发布时间】:2021-01-19 10:30:57
【问题描述】:
这是我的配置:
服务器
使用 Sanctum 提供对 REST API 的访问的 Laravel 8 应用程序。它被配置为在http://b8/上运行
客户
一个单独的 Vue CLI 3.0 SPA,它使用基于会话的 cookie 身份验证方法连接到 API。我已将 Vue CLI Serve 配置为在 http://app.b8/ 运行它。
问题
即使服务器和客户端在同一个域上,Chrome 也不允许 Set-Cookie 操作。翻阅了几篇帖子和文章后,我在Postman中成功运行了,但是在浏览器中运行的真正的Vue应用程序无法设置Sanctum cookie,因此无法登录。
这是我的配置:
.env
SESSION_DRIVER=cookie
SESSION_DOMAIN=.b8
SANCTUM_STATEFUL_DOMAINS=localhost,localhost:8080,127.0.0.1,127.0.0.1:8000,::1,b8,app.b8,app.b8:8080
vue.config.js
...
devServer: {
proxy: "http://b8/api/v1",
host: "app.b8"
},
Vue 应用中的登录功能
async login(context, credentials) {
axios.get('http://b8/sanctum/csrf-cookie').then(response => {
axios.post('http://b8/login', credentials).then(response2 => {
//successfully logged in.
});
});
},
错误信息
/sanctum/csrf-cookie 路由的外部调用成功返回并带来 Sanctum cookie。但是,Chrome 认为 cookie 对当前域无效,因此没有设置它。这是 Sanctum 令牌调用返回后开发工具窗格的 Cookies 选项卡(显示 Chrome 投诉的工具提示):
由于未设置 cookie,因此以下 login 调用失败并出现 419 错误。
我在这里错过了什么?
【问题讨论】:
标签: laravel vue.js cookies csrf laravel-sanctum