Flask 如何确保JWT不会';t在用户上过期

Flask 如何确保JWT不会';t在用户上过期,flask,jwt,flask-jwt-extended,Flask,Jwt,Flask Jwt Extended,因此,我能够使用flask JWT extended在登录时创建aa JWT 我把过期时间设为5分钟。 因此,我的VueJS应用程序中有路由,当它们被调用时(每次调用之前),我会调用“/api/check”以确保令牌有效 所有其他API调用都是通过axios到后端的 我不明白的是,因为cookie是HTTP,所以我不能用javascript检查补偿…这是否意味着我必须每X分钟ping一次后端,每次axios调用刷新cookie,然后进行实际的API调用 看起来开销很大。 有很多关于螺母和螺栓的代

因此,我能够使用flask JWT extended在登录时创建aa JWT

我把过期时间设为5分钟。 因此,我的VueJS应用程序中有路由,当它们被调用时(每次调用之前),我会调用“/api/check”以确保令牌有效

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

我不明白的是,因为cookie是HTTP,所以我不能用javascript检查补偿…这是否意味着我必须每X分钟ping一次后端,每次axios调用刷新cookie,然后进行实际的API调用

看起来开销很大。 有很多关于螺母和螺栓的代码,但是没有太多关于问题背后的实际步骤…理解


感谢一个分解jwt并返回过期时间的后端服务可以达到这个目的。

如果cookie即将过期,您可以让后端自动刷新cookie,而无需在前端执行任何额外操作。类似这样的东西(未经测试)

@app.after\u请求
def refresh_jwt_如果即将到期(响应):
expires\u time=get\u raw\u jwt().get('exp')
如果未在指定时间内到期:
返回响应
#根据应用程序和exp配置更改时间增量。
target_time=datetime.datetime.utcnow()+datetime.timedelta(分钟=5)
如果(目标时间>过期时间):
access\u token=创建\u access\u token(identity=get\u jwt\u identity())
设置\u访问\u cookies(响应、访问\u令牌)
返回响应

然后,如果用户在X多分钟内处于非活动状态,他们将注销,否则他们将根据需要继续获取新令牌。如果他们等待太长时间并注销,后端会返回401,您的前端会提示他们再次登录。

我认为您不需要路由“/api/check”来确保令牌有效。只需添加一个decorator
@jwt\u required

@api.route('/api/user')
@jwt_required
def api_user():
    result = #your logic
    return jsonify(result), 200

所以我每次打电话给其他人…每次打两个电话?你只要在JWT改变时打电话就行了。JWT仍将存储在仅Http的Cookie中,但您可以通过前端可访问的方式存储过期信息。有一些关于令牌刷新的信息可能会有所帮助。/api/check是针对VueRoute的,它不调用后端…iit是paage protecctiion,仅当我使用CSRF时,我需要发送刷新令牌还是访问CSRF…t这看起来像是一张空白支票,它会对任何令牌进入门作出反应…没有检查prrotections…使用此设置,您不需要刷新令牌,您可以在访问令牌过期之前隐式地保持刷新,而不需要辅助令牌。对于CSRF保护,您绝对仍然希望有这样的设置,但这与使用带有cookies扩展的flask jwt时的正常CSRF保护没有什么不同。我想我仍然应该使路由jwt受到保护……或者在创建新的jwt之前检查它是否是有效的jwt…
get_raw_jwt()
get_jwt\u identity()
将返回
None
,除非您访问了受保护的端点,并且提供的JWT已验证且未过期。而且,在一定时间后,目标时间不总是比过期时间长吗?只是始终刷新令牌?