JWT中的refresh_token

本文探讨了使用JWT(JSON Web Tokens)时遇到的token过期问题。当JWT过期后,通常需要通过refresh_token进行刷新。根据讨论,常规方法是在指定的refresh路径上设置middleware='jwt.refresh',但在实际操作中,这种方法可能导致新token的获取失败。为解决此问题,建议创建新的路由并在控制器中处理刷新逻辑。同时,文章提及了'Event::listen('tymon.jwt.valid')'钩子和全局异常处理的添加,但具体实现仍需进一步研究。
摘要由CSDN通过智能技术生成

参考链接:
https://github.com/tymondesigns/jwt-auth/issues/186
https://github.com/tymondesigns/jwt-auth/issues/11

利用JWT处理过期:
1.在普通路径下请求时如果token过期,则客户端再次发出一个请求给服务器到一个设定的refresh路径
2.在该路径下采用middleware = ‘jwt.refresh’,然后在处理函数中:

$token = JWTAuth::getToken();
$newToken = JWTAuth::refresh($token);

经过尝试,以上方法是不行的!!!不能在middleware=’jwt.refresh’下,请求到的新token首先提示不存在,然后又提示进入blacklist了。解决方法是,直接起一个新的路由,然后把上面的代码放到co

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JWT_REFRESH_TOKEN_EXPIRES 是一个用于设置 JWT 刷新令牌过期时间的变量,它通常与 JWT_ACCESS_TOKEN_EXPIRES 一起使用。下面是一个使用 Flask-JWT-Extended 扩展的例子: ```python from flask import Flask from flask_jwt_extended import JWTManager, create_access_token, create_refresh_token, jwt_required, jwt_refresh_token_required, get_jwt_identity, get_raw_jwt app = Flask(__name__) app.config['JWT_SECRET_KEY'] = 'super-secret' # 设置 JWT 密钥 app.config['JWT_ACCESS_TOKEN_EXPIRES'] = 3600 # 设置访问令牌过期时间为 1 小时 app.config['JWT_REFRESH_TOKEN_EXPIRES'] = 604800 # 设置刷新令牌过期时间为 1 周 jwt = JWTManager(app) # 用户登录,生成访问令牌和刷新令牌 @app.route('/login', methods=['POST']) def login(): username = request.json.get('username', None) password = request.json.get('password', None) if username != 'admin' or password != 'admin': return jsonify({'msg': 'Invalid username or password'}), 401 access_token = create_access_token(identity=username) refresh_token = create_refresh_token(identity=username) return jsonify({'access_token': access_token, 'refresh_token': refresh_token}), 200 # 使用访问令牌访问受保护的资源 @app.route('/protected', methods=['GET']) @jwt_required def protected(): current_user = get_jwt_identity() return jsonify({'msg': f'Hello, {current_user}!'}), 200 # 使用刷新令牌刷新访问令牌 @app.route('/refresh', methods=['POST']) @jwt_refresh_token_required def refresh(): current_user = get_jwt_identity() access_token = create_access_token(identity=current_user) return jsonify({'access_token': access_token}), 200 if __name__ == '__main__': app.run() ``` 在上面的例子,我们设置了 JWT_REFRESH_TOKEN_EXPIRES 为 1 周,表示刷新令牌在 1 周后过期。当用户登录成功后,我们生成了一个访问令牌和一个刷新令牌,并将它们返回给客户端。当客户端使用访问令牌访问受保护的资源时,我们使用 @jwt_required 装饰器来保护该路由,只有在客户端提供有效的访问令牌时才能访问。当客户端的访问令牌过期时,客户端可以使用刷新令牌来获取新的访问令牌,我们使用 @jwt_refresh_token_required 装饰器来保护刷新令牌路由,只有在客户端提供有效的刷新令牌时才能刷新访问令牌。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值