我正在尝试使用Gem devise-two-factor在Devise上实施双因素身份验证。我希望身份验证分为2个步骤。首先,我要询问用户名和密码。如果用户通过了此步骤,则他将被重定向到OTP的下一页,如果2FA被激活,否则会话将由设备验证。
如果用户选择了2FA,则我希望使用Devise执行所有身份验证,并且如果user.validate_and_consume_otp(CURRENT_OTP)为true,则不希望使用sign_in(user)
函数创建会话。我希望将用户名、密码和OTP作为参数传递给Devise,以便Devise在没有我干预的情况下处理所有三个参数的身份验证。
为此,我提出了一些工作流程:-
1.如果用户名和密码有效且正确,我会将其作为Post参数传递,并将用户名和密码作为隐藏字段,以及用户将在提交后填写的OTP,这三个参数将发送给Devise进行验证。
1.我首先验证用户名以及它是否存在于用户表中,如果存在,我将使用Devise默认函数user.valid_password检查有效密码?(“YOUR_PASSWORD_COMES_HERE”)如果这两个条件均为真,我将把用户的电子邮件作为会话变量传递到下一步,在第二步中,我仅验证OTP是否正确(由于用户名和密码验证在步骤1中完成)如果OTP正确,我们将使用作为会话变量传递的电子邮件为用户创建会话,并在成功登录后删除会话,否则我们将再次要求OTP。
你能提出更好的工作流程吗?
1条答案
按热度按时间s71maibg1#
如果你想在两个步骤中实现2FA,你可以尝试使用gem https://github.com/Houdini/two_factor_authentication。
此gem的默认工作流如下所示:
1.输入用户名和密码
1.如果用户名和密码正确,则通知用户OTP
1.插入OTP
1.如果otp是正确的,则登录正确。