flask - 如何确保用户的 JWT 不会过期
问题描述
所以我可以使用flask-jwt-extended在登录时创建一个JWT
我将到期时间设置为 5 分钟。所以我在我的 VueJS 应用程序中有路由,当它们被调用时(beforeeach)我调用“/api/check”以确保令牌有效。
所有其他 API 调用都是通过 axios 到后端的。
我不明白的是,由于 cookie 仅是 HTTP,我无法使用 javascript 检查过期...这是否意味着我必须每 X 分钟 ping 一次后端以及每次 axios 调用以刷新 cookie 然后进行实际的 API 调用?
似乎开销很大。有很多关于螺母和螺栓的代码,但在我遇到的问题背后的实际步骤上却没有太多......理解......
谢谢
解决方案
如果 cookie 即将过期,您可以让后端自动刷新 cookie,而无需在前端做任何额外的事情。像这样的东西(未经测试)
@app.after_request
def refresh_jwt_if_near_expiring(response):
expires_time = get_raw_jwt().get('exp')
if not expires_time:
return response
# Change the time delta based on your app and exp config.
target_time = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
if (target_time > expires_time):
access_token = create_access_token(identity=get_jwt_identity())
set_access_cookies(response, access_token)
return response
然后,如果用户在 X 分钟内处于非活动状态,他们将被注销,否则他们会根据需要继续获取新令牌。如果他们确实等待太久并退出,后端会返回 401,您的前端可以提示他们再次登录。
推荐阅读
- c# - Windows 服务器无法在 .net 框架 4.5.1 上运行
- java - Java 自动向量化
- java - 使用 Logback 的 RollingFileAppender 时,有没有办法使用默认的 Springboot“/actuator/logfile”端点?
- asp.net-mvc - 获取 ASP.Net MVC 项目中的分支名称
- python - 修改django查询集的结果
- c# - 用字符串生成器连接字符串?
- python - Apache Spark 读取 CSV 文件 - ClassNotFoundException
- javascript - 无序字符串数组与 lodash 的比较
- node.js - 用于 e2e 前端测试的暂存后端
- android - 是否有可能知道哪个视图打开了警报视图?