@jwt.token_in_blocklist_loader 不会触发
时间: 2023-05-14 14:05:53 浏览: 82
这个问题可能需要更多的上下文才能回答,但是我可以给出一些可能的解释。@jwt.token_in_blocklist_loader 是 Flask-JWT-Extended 扩展中的一个函数,用于检查 JWT token 是否在 blocklist 中。如果 token 在 blocklist 中,则认为它已经失效,无法再次使用。这个函数只有在使用 JWT token 进行认证时才会触发,如果你没有使用 JWT token 进行认证,那么这个函数就不会被调用。如果你有更多的上下文信息,我可以给出更具体的答案。
相关问题
@jwt.token_in_blocklist_loader 不会触发 写一个例子给我
当使用 Flask-JWT-Extended 扩展时,可以通过定义 @jwt.token_in_blocklist_loader 装饰器来实现在 token 被加入黑名单时触发的操作。下面是一个简单的例子:
```python
from flask_jwt_extended import JWTManager
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # 设置 JWT 密钥
jwt = JWTManager(app)
@jwt.token_in_blocklist_loader
def check_if_token_in_blocklist(jwt_header, jwt_payload):
# 在这里实现检查 token 是否在黑名单中的逻辑
# 如果在黑名单中,可以返回 True,否则返回 False
return False # 这里返回 False,表示 token 不在黑名单中
```
在上面的例子中,我们定义了一个名为 check_if_token_in_blocklist 的函数,并使用 @jwt.token_in_blocklist_loader 装饰器将其注册为 token_in_blocklist_loader。在函数中,我们可以根据 jwt_header 和 jwt_payload 参数实现检查 token 是否在黑名单中的逻辑。如果在黑名单中,可以返回 True,否则返回 False。在这个例子中,我们返回了 False,表示 token 不在黑名单中。
给我写一个 flask_jwt_extended 使用 token_in_blocklist_loader 的例子
好的,以下是一个使用 flask_jwt_extended 和 token_in_blocklist_loader 的例子:
```python
from flask import Flask
from flask_jwt_extended import JWTManager, jwt_required, create_access_token, get_jwt_identity, get_raw_jwt
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # 设置 JWT 密钥
jwt = JWTManager(app)
# 模拟一个 token 黑名单
blocklist = set()
# 定义 token_in_blocklist_loader 回调函数
@jwt.token_in_blocklist_loader
def check_if_token_in_blocklist(jwt_header, jwt_payload):
jti = jwt_payload['jti']
return jti in blocklist
# 定义登录接口
@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": "Bad username or password"}), 401
access_token = create_access_token(identity=username)
return jsonify(access_token=access_token), 200
# 定义需要 token 认证的接口
@app.route('/protected', methods=['GET'])
@jwt_required
def protected():
current_user = get_jwt_identity()
return jsonify(logged_in_as=current_user), 200
# 定义注销接口
@app.route('/logout', methods=['DELETE'])
@jwt_required
def logout():
jti = get_raw_jwt()['jti']
blocklist.add(jti)
return jsonify({"msg": "Successfully logged out"}), 200
if __name__ == '__main__':
app.run()
```
这个例子中,我们定义了一个 token 黑名单 `blocklist`,并在 `token_in_blocklist_loader` 回调函数中检查 token 是否在黑名单中。当用户注销时,我们将该 token 的 `jti` 添加到黑名单中。这样,即使该 token 没有过期,也无法再次使用。