flask-jwt-extended使用详解
相关配置注册jwt
1 | app.config['JWT_SECRET_KEY'] = 'jwt-secret-attendance' |
产生token
1 | access_token = create_access_token(identity=username) |
获取当前用户
1 | username = get_jwt_identity() |
高级用法
自定义密钥和加秘方式
1 | access_token = encode_access_token(identity=jwt_manager._user_identity_callback(username), |
令牌撤销
app.config[‘JWT_BLACKLIST_TOKEN_CHECKS’] = [‘access’, ‘refresh’]
创建我们的函数以检查令牌是否已被列入黑名单。在这简单情况下,我们将只存储在Redis的令JTI(唯一标识符)每当我们创建一个新令牌时(撤销状态为’false’)。这个 function将返回令牌的撤销状态。如果令牌没有 存在于这个商店,我们不知道它来自哪里(因为我们正在新添加 创建令牌到我们的商店,撤销状态为’false’)。在这种情况下 出于安全考虑,我们会考虑撤销令牌。1
2revoked_store = redis.StrictRedis(host='localhost', port=6379, db=0,
decode_responses=True)
1 |
|
产生token1
2
3
4
5
6
7access_token = create_access_token(identity=username)
将令牌存储在redis中,状态目前未被撤销。
我们可以使用`get_jti()`方法获取唯一标识符字符串
每个令牌。我们还可以在redis中设置这些令牌的到期时间,所以它们会在到期后自动删除。
我们将设定令牌过期后不久将自动删除的所有内容
access_jti = get_jti(encoded_token=access_token)
revoked_store.set(access_jti, 'false', ACCESS_EXPIRES * 1.2)
撤销视图1
2
3
4
5
6
def logout():
jti = get_raw_jwt()['jti']
revoked_store.set(jti, 'true', ACCESS_EXPIRES * 1.2)
return jsonify({"msg": "Access token revoked"}), 200
在令牌中存储和获取数据
自定义一个基类存储角色和用户id1
2
3
4
5class UserObject:
def __init__(self,id,username, role):
self.id = id
self.username = username
self.role = role
1 | 创建一个将在create_access_token时调用的函数 |
产生令牌1
2
3data = UserObject(id=user.id,username=username,role=user.role)
expires = datetime.timedelta(days=2)
access_token = create_access_token(identity=data, expires_delta=expires)
如何获取数据1
2
3username = get_jwt_claims()
user_id = get_jwt_claims()['id']
user_role = get_jwt_claims()['role']
最后更新: 2019年03月14日 14:30
原始链接: https://zem12345678.github.io/2019/03/14/flask-jwt-extended使用详解/