Flask:登录ou时过期令牌

2024-05-13 12:50:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Flask和itsharging来实现基于令牌的登录。它工作正常,但当用户使用logout_user()call注销时,令牌仍然有效,从而导致不一致。所以我试着让代币过期,但找不到合适的方式。我想到的是:

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

但我不喜欢这个解决方案。有人能提出更好的办法吗?在


Tags: selftokenauthidconfigappflasksecret
1条回答
网友
1楼 · 发布于 2024-05-13 12:50:38

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

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

相关问题 更多 >