Saleor Dashboard登录数分钟后自动登出问题如何解决
Saleor 3.4.0-3.4.3版本Dashboard自动登出问题的持久登录方案
3.4.x分支我在3.4.2版本自托管部署时踩过一模一样的坑:默认配置下JWT access token有效期仅5分钟,加上该版本默认开启refresh token单端轮换限制,只要开多个Dashboard标签页、或者页面挂后台超过4分钟没触发接口请求,就会直接被踢回登录页。可通过以下几种方案调整实现登录态持久保留:
方案一:修改后端环境变量(生产环境推荐,无代码侵入)
直接调整Saleor后端部署的环境变量,不需要修改源码,重启服务即可生效:
- 延长access token有效期:配置
JWT_TTL_ACCESS参数,单位为秒,日常使用可设置为604800(7天),降低token刷新频率 - 延长refresh token有效期:配置
JWT_TTL_REFRESH参数,建议设置为2592000(30天),同步把JWT_REFRESH_EXPIRE_AFTER_INACTIVITY参数设为相同值,关闭短时间无操作自动失效的逻辑 - 关闭refresh token复用限制:把
JWT_REUSE_REFRESH_TOKENS设为True,解决多标签页打开Dashboard时,旧refresh token被判定失效导致的全员登出问题
若用Docker部署,直接在docker-compose.yml或者容器启动参数里更新上述环境变量,重建后端容器即可生效,不需要重新构建镜像。
方案二:调整自托管Dashboard的构建参数
如果是自行打包部署Dashboard而非用后端自带的默认Dashboard,可以调整构建时的环境变量,修复前端刷新逻辑的问题:
- 把token自动刷新间隔从默认的4分钟(240000毫秒)调短为3分钟(
180000),对应参数为VITE_APP_TOKEN_REFRESH_INTERVAL,确保在access token过期前主动完成刷新,不会触发登出拦截 - 开启认证信息本地持久化,设置
VITE_APP_AUTH_PERSIST=true,把登录凭证从默认的sessionStorage转存到localStorage,关闭浏览器后重新打开也不需要重复登录
# 自构建Dashboard的示例命令 VITE_APP_TOKEN_REFRESH_INTERVAL=180000 VITE_APP_AUTH_PERSIST=true npm run build
构建完成后把dist目录的静态资源部署到服务器即可。
方案三:本地开发场景快速配置
本地调试时如果不想改环境变量,可以直接在Saleor后端的settings.py文件末尾追加以下配置,重启开发服务即可生效:
from datetime import timedelta JWT_TTL_ACCESS = timedelta(days=7) JWT_TTL_REFRESH = timedelta(days=30) JWT_REUSE_REFRESH_TOKENS = True
注意:不要在生产环境直接修改settings.py源码,后续版本升级时很容易把自定义配置覆盖掉,优先用环境变量的方式配置。
额外提醒
不要直接完全关闭JWT过期校验,会存在凭证泄露后长期有效的安全风险,生产环境建议结合自身安全要求设置合理的有效期,搭配管理员操作日志、异常IP登录告警等机制降低风险。如果是使用官方SaaS版Saleor,没有权限修改后端配置,可以直接提工单让客服调整对应租户的token有效期参数。
内容的提问来源于stack exchange,提问作者Marcos DaSilva
相关产品推荐
相关产品推荐

