我的用例是为重置密码 API 生成令牌。我正在用 python 中的危险库来做这件事。 https://pythonhosted.org/itsdangerous/。
此令牌(在重置密码链接内)是通过电子邮件转发给客户端的,令牌有过期时间限制,经过验证,密码重置可以成功通过。
这里的问题是,一旦密码重置成功,我如何确保在到期时限内不能再次使用相同的令牌(电子邮件链接)。我可以看到 itsdangerous 有 URLSafeTimedSerializer,它有助于在验证阶段评估令牌的年龄。另一方面,TimedJSONWebSignatureSerializer 有助于在生成令牌时设置到期时间。请检查随附的代码。
有没有更好的方法强制使令牌过期?如果不是,那么保存已使用令牌状态的最佳方法是什么?
import itsdangerous
key = "test"
# signer = itsdangerous.URLSafeTimedSerializer(key)
signer = itsdangerous.TimedJSONWebSignatureSerializer(key, expires_in=5)
email = "email@test.com"
# token = email # to be used with URLSafeTimedSerializer
token = signer.dumps({"email": email})
print token
# print signer.loads(token, max_age=5) # to be used with URLSafeTimedSerializer
print str(signer.loads(token)["email"]) # to be used with TimedJSONWebSignatureSerializer