flask_jwt_extended 生成新的token的同时销毁旧的token
时间: 2023-05-13 20:05:09 浏览: 482
可以使用 `flask_jwt_extended` 中的 `create_access_token` 函数生成新的 token,并使用 `jwt_required` 装饰器来保护需要验证的路由。在生成新的 token 时,可以使用 `jwt_optional` 装饰器来检查旧的 token 是否存在,如果存在则可以使用 `get_raw_jwt` 函数获取旧的 token 的信息,然后使用 `add_token_to_database` 函数将旧的 token 添加到黑名单中,从而实现销毁旧的 token 的目的。
相关问题
flask_jwt_extended 生成新的token的同时销毁旧的token
可以使用 `flask_jwt_extended` 提供的 `create_access_token` 函数生成新的 token,同时使用 `jwt_manager` 提供的 `jwt_manager._set_blacklist_revoked_token_callback` 函数将旧的 token 加入黑名单并销毁。具体代码如下:
```python
from flask_jwt_extended import create_access_token, jwt_manager
# 生成新的 token
new_token = create_access_token(identity=user_id)
# 将旧的 token 加入黑名单并销毁
@jwt_manager._set_blacklist_revoked_token_callback
def revoke_token_callback(jti, *args, **kwargs):
blacklist.add(jti)
revoke_token_callback(old_token["jti"])
```
其中,`blacklist` 可以是一个 set,用于存储已经被销毁的 token 的 jti。
flask_jwt_extended 生成新的token的同时销毁旧的token 写一个例子给我
当使用 flask_jwt_extended 生成新的 token 时,可以通过设置 JWT_BLACKLIST_ENABLED 为 True 来启用 token 黑名单功能,从而实现销毁旧的 token。以下是一个例子:
```python
from flask import Flask
from flask_jwt_extended import JWTManager, jwt_required, create_access_token, get_raw_jwt
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # 设置 JWT 密钥
app.config['JWT_BLACKLIST_ENABLED'] = True # 启用 token 黑名单功能
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access'] # 只对 access token 进行黑名单检查
jwt = JWTManager(app)
# 模拟一个用户登录,生成 access token 和 refresh token
@app.route('/login', methods=['POST'])
def login():
access_token = create_access_token(identity='user_id')
refresh_token = 'refresh_token'
return {'access_token': access_token, 'refresh_token': refresh_token}
# 模拟一个需要认证的 API
@app.route('/protected', methods=['GET'])
@jwt_required
def protected():
return {'message': 'Hello, World!'}
# 在请求头中添加 access token,访问受保护的 API
@app.route('/test', methods=['GET'])
def test():
headers = {'Authorization': 'Bearer access_token'}
response = app.test_client().get('/protected', headers=headers)
return response.json
# 在请求头中添加 refresh token,生成新的 access token 并销毁旧的 access token
@app.route('/refresh', methods=['POST'])
def refresh():
# 检查 refresh token 是否有效
# ...
# 生成新的 access token
new_access_token = create_access_token(identity='user_id')
# 将旧的 access token 加入黑名单
jti = get_raw_jwt()['jti']
jwt._set_blacklist(jti)
return {'access_token': new_access_token}
```
在上面的例子中,当用户登录成功后,会生成一个 access token 和一个 refresh token。在访问受保护的 API 时,需要在请求头中添加 access token。在生成新的 access token 时,需要在请求头中添加 refresh token,并将旧的 access token 加入黑名单。
阅读全文
相关推荐













