我正在使用带有危险的Flask来实现基于令牌的登录。它工作正常但是当用户使用logout_user()
调用注销时,令牌仍然有效,从而导致不一致。所以我试图使令牌过期,但找不到合适的方法。以下是我提出的建议:
def generate_auth_token(self, expiration):
s = Serializer(current_app.config['SECRET_KEY'],
expires_in=expiration)
return s.dumps({'id': self.id}).decode('ascii')
@staticmethod
def verify_auth_token(token):
import flask_login
u = flask_login._get_user()
if not u or isinstance(u, flask_login.AnonymousUserMixin):
return None
s = Serializer(current_app.config['SECRET_KEY'])
try:
data = s.loads(token)
except:
return None
return User.query.get(data['id'])
但我不喜欢这个解决方案。有人可以建议一个更好的方法吗?
答案 0 :(得分:7)
最终,基于令牌的身份验证并不承认容易的特定失效。 (通用失效很容易 - 只需更改用于签署会话的SECRET_KEY
- 每个会话都会自动失效)。有几种方法可以使特定的失效工作: