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