如何使用 Django 生成基于时间的一次性密码(OTP)

Har*_*rsh 1 python django python-3.x

我使用以下代码生成一个随机字符串作为 OTP -

from django.utils.crypto import get_random_string

otp = get_random_string(6, allowed_chars='0123456789')
Run Code Online (Sandbox Code Playgroud)

问题在于,由于短信发送问题,人们要求提供大量 OTP,然后当他们一起到达时,他们不知道哪一个当前有效。

我想生成一个30 分钟内不会改变的 OTP ,并且对于每个电话号码都是唯一的,例如+919999999999

Sel*_*cuk 6

如果你想要确定性,只需将当前时间戳整数除以 30 分钟,将其与电话号码和秘密盐连接起来,然后将它们全部哈希。

或者,您可以生成一个随机的并将其存储在 Django 缓存中,过期时间为 30 分钟。