flask_jwt_extended 如何主动销毁一个token
时间: 2023-05-13 19:05:11 浏览: 109
可以使用 `jwt_manager.token_in_blacklist_loader` 方法来实现主动销毁一个 token。具体实现方法如下:
1. 在 Flask 应用中初始化 JWT 扩展:
```python
from flask_jwt_extended import JWTManager
jwt_manager = JWTManager(app)
```
2. 创建一个 token 黑名单列表:
```python
blacklist = set()
```
3. 实现 `jwt_manager.token_in_blacklist_loader` 方法:
```python
@jwt_manager.token_in_blacklist_loader
def check_if_token_in_blacklist(decrypted_token):
jti = decrypted_token['jti']
return jti in blacklist
```
4. 在需要主动销毁 token 的地方,将 token 的 jti 添加到黑名单列表中:
```python
blacklist.add(jti)
```
这样,当使用已被添加到黑名单列表中的 jti 创建 token 时,`check_if_token_in_blacklist` 方法会返回 True,从而使得该 token 无效。
相关问题
flask_jwt_extended 主动销毁token 写一个例子给我
当用户注销或者需要退出登录时,我们需要主动销毁token,以保证用户的安全性。下面是一个使用 flask_jwt_extended 库实现主动销毁token的例子:
```python
from flask import Flask
from flask_jwt_extended import JWTManager, jwt_required, create_access_token, get_jwt_identity, unset_jwt_cookies
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # 设置JWT的密钥
jwt = JWTManager(app)
@app.route('/login', methods=['POST'])
def login():
# 用户登录成功后,生成token并返回给客户端
access_token = create_access_token(identity='user_id')
return {'access_token': access_token}
@app.route('/logout', methods=['POST'])
@jwt_required() # 需要登录才能访问
def logout():
# 主动销毁token
unset_jwt_cookies()
return {'message': 'Logged out successfully'}
if __name__ == '__main__':
app.run()
```
在上面的例子中,我们定义了两个路由:`/login` 和 `/logout`。当用户登录成功后,`/login` 路由会生成一个token并返回给客户端。当用户需要退出登录时,`/logout` 路由会主动销毁token,以保证用户的安全性。
需要注意的是,在 `/logout` 路由中,我们使用了 `unset_jwt_cookies()` 方法来主动销毁token。这个方法会清除客户端的token,使其失效。
flask_jwt_extended 蓝图中 销毁旧的token给我写一个例子
当用户注销或更改密码时,我们需要使旧的token失效,以确保安全性。下面是一个使用 flask_jwt_extended 蓝图销毁旧的token的例子:
```python
from flask import Blueprint
from flask_jwt_extended import jwt_required, get_jwt_identity, get_raw_jwt
auth_bp = Blueprint('auth', __name__)
@auth_bp.route('/logout', methods=['POST'])
@jwt_required
def logout():
jti = get_raw_jwt()['jti']
# 将 jti 添加到黑名单中
# 这样,所有使用该 jti 的 token 都将失效
# 你可以使用 redis 或者数据库来实现黑名单
# 这里只是一个简单的示例
BLACKLIST.add(jti)
return {'message': '注销成功'}, 200
```
在上面的例子中,我们使用了 flask_jwt_extended 提供的 get_raw_jwt() 函数来获取当前 token 的 jti(JWT ID)值,然后将其添加到一个黑名单中,以使所有使用该 jti 的 token 失效。BLACKLIST 可以是一个 set 或者一个列表,用于存储所有失效的 jti 值。
请注意,这只是一个简单的示例,实际应用中你需要更加严格的安全措施来保护用户的隐私和数据安全。