在让用户使用pyotp创建新密码之前如何实现基于OTP的验证?

Posted

技术标签:

【中文标题】在让用户使用pyotp创建新密码之前如何实现基于OTP的验证?【英文标题】:How to implement OTP based verification before letting the user to create a new password using pyotp? 【发布时间】:2021-09-12 21:53:12 【问题描述】:

我对 Django 休息框架很陌生。我正在为我的移动应用程序构建 API。 在忘记密码模块中,我有以下流程

    要求用户进入手机 检查存在 如果存在 -> 发送 OTP 验证并让用户创建新密码。

但是在这种情况下,我想知道以下情况的处理方式。

当一个用户请求 otp 并等待它验证时,同时另一个用户请求 OTP 这时,如何处理这两个用户? 我想到了

    创建字典并将用户 ID 保存为键,并将 otp 保存为 views.py 中的值,以验证特定用户。 暂时存储 otp 直到验证。

对于这种情况,哪种安全方式和替代方案是什么?

【问题讨论】:

【参考方案1】:

您应该创建一个如下所示的表:

===== UserOTP =====
user: foreign-key to user
code: CharField, random generated code here (or token)
create_date: auto-fill created datetime
used_date: nullable datetime field

然后在每个密码重置请求上在此表上创建一行,通过 SMS 或电子邮件将生成的代码发送给用户,

然后在另一个端点接收用户的代码并检查它(过期和之前使用过,属于该用户等)然后继续密码重置过程。

【讨论】:

以上是关于在让用户使用pyotp创建新密码之前如何实现基于OTP的验证?的主要内容,如果未能解决你的问题,请参考以下文章

Active Directory 如何在设置新密码时比较用户以前的密码?

基于Openresty实现业务安全防护

创建新密码的最佳方法是啥?

检查用户密码并创建新密码

如何在Wordpress中更新新密码之前从db验证旧密码

centos7.6怎么设置允许新密码与用户名相同?