首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel Sanctum突然令牌不匹配,仅在清除浏览器cookie后才起作用

Laravel Sanctum突然令牌不匹配,仅在清除浏览器cookie后才起作用
EN

Stack Overflow用户
提问于 2021-08-27 16:01:03
回答 1查看 300关注 0票数 1

我遇到了一个关于Laravel Sanctum的奇怪的问题。我已经按照文档中的说明对其进行了配置,它可以正常工作。

但有时它在尝试获取受圣殿保护的路由时开始发送419错误,并且仅在清除浏览器cookie或重置应用程序密钥(php artisan key:generate)后才起作用。

我只在具有本地域的本地环境中发生过这种情况(webapp.test由主机文件路由,由Apache webserver提供服务),但我担心这种情况会发生在生产服务器上。

我的.env文件包括下一个配置,我读取这些配置是让它在本地环境中工作所必需的:

代码语言:javascript
运行
复制
SESSION_DOMAIN=webapp.test
SANCTUM_STATEFUL_DOMAINS=webapp.test

此外,会话驱动程序和生存期也是默认设置:

代码语言:javascript
运行
复制
SESSION_DRIVER=file
SESSION_LIFETIME=120

我的config/cors.php文件:

代码语言:javascript
运行
复制
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Cross-Origin Resource Sharing (CORS) Configuration
    |--------------------------------------------------------------------------
    |
    | Here you may configure your settings for cross-origin resource sharing
    | or "CORS". This determines what cross-origin operations may execute
    | in web browsers. You are free to adjust these settings as needed.
    |
    | To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
    |
    */

    'paths' => ['api/*', 'sanctum/csrf-cookie'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => false,

    'max_age' => true,

    'supports_credentials' => true,

];

我的bootstrap.js文件:

代码语言:javascript
运行
复制
window.axios = require("axios");

window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
window.axios.defaults.withCredentials = true;

我有一个实例化axios的api.js文件:

代码语言:javascript
运行
复制
import axios from "axios";

export const api = axios.create({
  baseURL: `${baseUrl}/api`,
  headers: {
    "Content-Type": "application/json",
  },
});

然后,当我必须调用我的api端点时,我只需导入此api,如下所示:

代码语言:javascript
运行
复制
import { api } from "api";

...

api.post(`/cart/add`,data).then(()=>{}).catch(err=>{console.error(err});

正如我之前说过的,webapp运行得很好,但几天后它会突然阻止所有请求,并发送419令牌不匹配错误(即使使用私人模式),直到浏览器cookie被清除或应用程序密钥被重置。

我的设置中有什么问题吗?或者你认为这只是一个本地行为?

任何建议都会有所帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-03 20:31:50

问题是您的令牌在配置中指定的特定时间后过期。这也可能发生在生产版本中。

我假设您在本地注意到了这个问题,而不是因为您正在测试您的应用程序,而令牌在那个时刻即将到期。

我会将令牌过期时间设置为一小时,并在您的SPA后台每50分钟更新一次访问令牌。这可以防止当前正在使用该网站的用户被注销。

如果用户在一段时间后返回站点,并且其cookies中有过期的令牌,并且您的路由返回代码419,则您可以通过axios interceptor响应此错误,并从浏览器cookies中删除过期的令牌,并向用户显示登录窗口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68956375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档