首页 > 解决方案 > 如何确保用户的 JWT 不会过期

问题描述

所以我可以使用flask-jwt-extended在登录时创建一个JWT

我将到期时间设置为 5 分钟。所以我在我的 VueJS 应用程序中有路由,当它们被调用时(beforeeach)我调用“/api/check”以确保令牌有效。

所有其他 API 调用都是通过 axios 到后端的。

我不明白的是,由于 cookie 仅是 HTTP,我无法使用 javascript 检查过期...这是否意味着我必须每 X 分钟 ping 一次后端以及每次 axios 调用以刷新 cookie 然后进行实际的 API 调用?

似乎开销很大。有很多关于螺母和螺栓的代码,但在我遇到的问题背后的实际步骤上却没有太多......理解......

谢谢

标签: flaskjwtflask-jwt-extended

解决方案


如果 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,您的前端可以提示他们再次登录。


推荐阅读