【问题标题】:How to delete the URLSafeTimedSerializer token after use in python?在 python 中使用后如何删除 URLSafeTimedSerializer 令牌?
【发布时间】:2020-03-10 04:12:15
【问题描述】:

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

【问题讨论】:

  • 您好,请参考:stackoverflow.com/help/how-to-ask,了解如何提出好问题。如果没有您已经尝试过的代码,它基本上是在猜测,不会帮助您理解它。以易于理解且没有不必要代码的方式发布您的代码,以便我们指出问题所在并为您提供帮助。

标签: python token forgot-password itsdangerous


【解决方案1】:

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

假设您通过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 是最常用的一种(根据我的经验)。如果其他用户有其他建议,请随时编辑此答案。

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 2023-03-20
    • 2019-02-08
    • 2016-06-12
    • 1970-01-01
    • 2017-03-29
    • 2016-01-30
    • 2014-04-28
    相关资源
    最近更新 更多