我用laravel 8 sancutum和vue在本地开发了一个小型网络应用程序。
在本地和prod服务器上,我都使用docker,所以一切都是一样的。sub.my-domain.com
所有局部工作正常。
我遇到的问题是在实时服务器上运行代码时。
我首先向/sanctum/csrf-cookie
发送一个请求,它返回一个204
响应代码,但没有设置cookie-这就是问题所在,我认为当在本地运行这个请求时,设置了XSRF-TOKEN
。
VueX中的登录方法:
login: function ({ commit }, data) {
axios.get('/sanctum/csrf-cookie', { withCredentials: true })
.then(response => {
axios.post('api/login', {
email: data.email,
password: data.password
})
.then(response => {
if (response.data.success) {
commit('setUser', response.data);
// router.go('/sales-dashboard')
} else {
console.log(response.data.message)
}
})
.catch(function (error) {
console.error(error);
});
})
},
.环境
SESSION_DRIVER=cookie
SANCTUM_STATEFUL_DOMAINS=my-domain.com
SESSION_DOMAIN=.my-domain.com
SESSION_LIFETIME=120
SESSION_SECURE_COOKIE=false;
config/sanctum.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1,.my-domain.com, sub.my-domain.com',
env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
))),
我不知道我哪里出错了,因为它在本地运行良好,所以一定是与配置有关。
澄清一下,实际的登录端点工作正常,但是当转到sancutum中间件后面的路由时,我得到了一条未经身份验证的消息。
请让我知道我哪里做错了
谢谢
1条答案
按热度按时间h43kikqp1#
问题在于CORS和密室的建立。
如果你遇到了类似的问题,要检查两件事。
1 - CORS -检查您的
session.php
文件,如果您没有使用SSL,请将secure
设置为false
,并确保same_site
为lax
。2 - Sanctum config -检查
sanctum.php
并确保您的域是stateful
密钥的一部分(我使用子域,所以我使用sub.domain.com(没有端口或协议))。我认为
SESSION_DOMAIN
上的前导.
是通配符。一旦这一切都完成了,一切都在工作。