gpt4 book ai didi

python - Flask:注销时 token 过期

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:33 25 4
gpt4 key购买 nike

我正在使用带有 itsdangerous 的 Flask 来实现基于 token 的登录。它工作正常,但是当用户使用 logout_user() 调用注销时, token 仍然有效,导致不一致。所以我也试图让 token 过期但找不到合适的方法。这是我想出的:

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'])

但我不喜欢这个解决方案。有人可以建议更好的方法吗?

最佳答案

最终,基于 token 的身份验证不允许简单的特定失效。 (通用失效很容易 - 只需更改用于签署 session 的 SECRET_KEY - 每个 session 都会自动失效)。有几种方法可以使特定的失效生效:

  1. 在用户的个人资料中存储一个随机数,并在他们每次注销时重置它。任何不包含最新随机数的 token 将立即被视为无效。
  2. 存储一组已撤销的 token (一旦它们过期就将其删除以防止该组无限增长)并根据该组检查每个 token 。当用户注销并且他们的 token 上仍有时间时,将用户的 token 添加到集合中。
  3. 发行短期 token 并提供简单的续订流程(在 API 级别或在您的应用程序中),这样 5 分钟的 token 就不会影响用户体验。

关于python - Flask:注销时 token 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33736092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com