如何验证用户从浏览器在数据库中输入的otp?

时间:2018-10-23 08:22:42

标签: ruby-on-rails session

我正在开发OTP Signing Rails应用程序。我已经使用活动模型otp gem生成了otp.gem创建了otp_secret_key列来存储otp。应用程序通过邮件将OTP发送给用户,然后用户应输入电子邮件并正确otp登录(应创建会话)。我被困在创建会话的过程中.session的代码如下:


     def create
        user = User.find_by(email: params[:session][:email])
        otp = params[:session][:otp_code]
        if user.authenticate_otp(otp)
           session[:user_id] = user.id
           flash[:success] = 'Successfully logged in'
           redirect_to welcome_home_path
        else
           flash.now[:danger] = 'Something wrong with your login information!'
        end
    end

提交表格后,params哈希中存在的参数为:


     Parameters: {"utf8"=>"✓", "session"=>{"email"=>"test23@example.com", "otp_code"=>"8496"}, "commit"=>"Login"}

但是在浏览器上它卡在同一页面上,并且在终端上显示tha No template found for SessionsController#create, rendering head :no_content 但是,如果输入的值正确,我想将其重定向到Welcome / home路径。

该怎么做?

P.S:我的用户表包含user_id,user_email和otp_secret_key列 预先感谢

1 个答案:

答案 0 :(得分:0)

事实证明,在活动的otp gem中,特定用户的otp仅有效30秒。因此,如果我立即对用户进行身份验证,则它可以正常工作。但是,在30秒后,它显示为“无效的登录信息”。 因此,我使用drift:来增加otp的有效时间。