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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何验证用户从数据库中的浏览器输入的otp?相关的知识,希望对你有一定的参考价值。

我正在研究OTP signin rails application。我使用了活动模型otp gem来生成otp。gem创建了otp_secret_key列来存储otp。应用程序通过邮件将OTP发送给用户。然后用户应该输入电子邮件并更正otp登录(会话应该被创建)。我被困在创建会话的部分。会话的代码如下:


     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"}

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

怎么做?

P.S:我有user_id,user_email和otp_secret_key列的用户表,提前谢谢

答案

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

以上是关于如何验证用户从数据库中的浏览器输入的otp?的主要内容,如果未能解决你的问题,请参考以下文章

如何验证输入电子邮件是不是已存在于数据库中?

如何使用 Firebase android 验证收到的用于手机号码验证的 OTP

无需注册的 iOS Firebase OTP 验证

节点中的 OTP 验证

Firebase 身份验证 Flutter 中的电话号码

如何使用 Twitter Digit Framework 在 iOS 中使用 OTP 进行多用户手机号码身份验证?