python - 在 python 中使用后如何删除 URLSafeTimedSerializer 令牌?
问题描述
我使用 python itsdangerous URLSafeTimedSerializer 创建了一个令牌,用于忘记密码功能。令牌在 max-age 之后过期,但是当密码被重置时,我需要使该令牌过期,这样用户就无法使用令牌一次又一次地重置密码,直到它过期。那么,这里的问题是用户重置密码后如何使令牌过期?
解决方案
尽管有@Uber 的评论,但我理解这个问题。另外我相信这更像是一个设计问题,所以发布代码没有多大意义。这次我将提供一个答案,但请记住为将来正确编写问题,例如提供一个场景,例如您的数据库表并更好地描述重置密码的活动序列(请参阅https://stackoverflow.com /帮助/如何询问)。
因此,假设您通过库生成令牌URLSafeTimedSerializer
,如下所示:
from itsdanger import URLSafeTimedSerializer
ts = URLSafeTimedSerializer("my-secret-key")
token = ts.dumps(email, salt="my-salt")
为了使此类令牌过期,您有不同的可能性:
- 创建已使用令牌的黑名单(这不是一个好主意,因为它会变得太长,并且在生成令牌时可能会发生冲突)。
- 将“token_reset”字段添加到您的用户表中,并将当前有效令牌存储在那里。一旦用户使用它,就将其从表中删除。如果用户不存在令牌,则意味着他/她已经使用了它。
- 给你的令牌添加一个时间戳,这样当你取回它时(你可以用 itsdanger 库解密它),你知道它是否已经过期(尽管用户可能在 5 分钟内使用它两次)。
可能有其他方法可以解决此类问题,但解决方案 #2 是最常用的一种(根据我的经验)。如果其他用户有其他建议,请随时编辑此答案。
推荐阅读
- android - 如何创建文件并在环境变量中设置并在 build.gradle 中获取文件中的数据?
- jquery - 单击时在较大的内部显示较小的图像
- php - 无法从 MySQL 中删除行
- php - 使用 htaccess 规则将 API 路径重定向到 Slim Routes
- powershell - 为什么我的 PowerShell 脚本不遵守步骤顺序?
- apache-kafka - 领导者更改后,Spring kafka 消费者不提交到 kafka 服务器
- django - Django 设计模型 - 当状态字段的数据发生变化时,其余模型状态随之变化
- javascript - 在 Express.JS 中呈现页面之前的异步请求
- javascript - 无法从 JS 中的文件中提取 XML 节点值 - 它打印为“未定义”
- c - 如何使用 libcurl + POST 上传文件?