flask_jwt_extended 生成新的token的同时销毁旧的token 写一个例子给我
时间: 2023-05-13 19:05:09 浏览: 361
当使用 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 加入黑名单。
阅读全文