1

我使用 python itsdangerous URLSafeTimedSerializer 创建了一个令牌,用于忘记密码功能。令牌在 max-age 之后过期,但是当密码被重置时,我需要使该令牌过期,这样用户就无法使用令牌一次又一次地重置密码,直到它过期。那么,这里的问题是用户重置密码后如何使令牌过期?

4

1 回答 1

3

尽管有@Uber 的评论,但我理解这个问题。另外我相信这更像是一个设计问题,所以发布代码没有多大意义。这次我将提供一个答案,但请记住为将来正确编写问题,例如提供一个场景,例如您的数据库表并更好地描述重置密码的活动序列(请参阅https://stackoverflow.com /帮助/如何询问)。

因此,假设您通过库生成令牌URLSafeTimedSerializer,如下所示:

from itsdanger import URLSafeTimedSerializer
ts = URLSafeTimedSerializer("my-secret-key")
token = ts.dumps(email, salt="my-salt")

为了使此类令牌过期,您有不同的可能性:

  1. 创建已使用令牌的黑名单(这不是一个好主意,因为它会变得太长,并且在生成令牌时可能会发生冲突)。
  2. 将“token_reset”字段添加到您的用户表中,并将当前有效令牌存储在那里。一旦用户使用它,就将其从表中删除。如果用户不存在令牌,则意味着他/她已经使用了它。
  3. 给你的令牌添加一个时间戳,这样当你取回它时(你可以用 itsdanger 库解密它),你知道它是否已经过期(尽管用户可能在 5 分钟内使用它两次)。

可能有其他方法可以解决此类问题,但解决方案 #2 是最常用的一种(根据我的经验)。如果其他用户有其他建议,请随时编辑此答案。

于 2019-11-21T11:12:13.613 回答