在python中使用URLSafeTimedSerializer令牌后如何删除?

2024-04-25 19:33:30 发布

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

我使用python的URLSafeTimedSerializer为忘记密码功能创建了一个令牌。令牌将在最长期限后过期,但当密码重置时,我需要使该令牌过期,以便用户无法使用令牌一次又一次地重置密码,直到其过期。所以,这里的问题是如何在用户重置密码后使令牌过期?你知道吗


Tags: 用户功能密码重置期限urlsafetimedserializer
1条回答
网友
1楼 · 发布于 2024-04-25 19:33:30

尽管有@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\u reset”字段添加到用户表中,并将当前有效的令牌存储在那里。一旦用户使用它,就从表中删除它。如果用户不存在令牌,则表示他/她已经使用了该令牌。你知道吗
  3. 在令牌中添加一个时间戳,这样当您取回它时(您可以使用itsdanger库对它进行解密),您就知道它是否过期了(尽管用户可以在5分钟内使用它两次)。你知道吗

也许还有其他方法可以解决这个问题,但解决方案2是最常用的方法(根据我的经验)。如果其他用户有其他建议,请随意编辑此答案。你知道吗

相关问题 更多 >