【发布时间】:2019-03-27 09:56:28
【问题描述】:
我正在开发 OTP 登录轨道应用程序。我使用活动模型 otp gem 来生成 otp。gem 创建 otp_secret_key 列来存储 otp。应用程序通过邮件将 OTP 发送给用户。然后用户应输入电子邮件并更正 otp 以登录(应创建会话)。我被困在创建会话的部分。会话代码如下:
定义创建 user = User.find_by(email: params[:session][:email]) otp = 参数[:session][:otp_code] 如果 user.authenticate_otp(otp) session[:user_id] = user.id flash[:success] = '登录成功' 重定向到 Welcome_home_path 别的 flash.now[:danger] = '您的登录信息有问题!' 结尾 结尾提交表单后params hash中的参数有:
参数:{"utf8"=>"✓", "session"=>{"email"=>"test23@example.com", "otp_code"=>"8496"}, "commit"=>"Login"}但是在浏览器上它卡在同一页面上,在终端上它显示 No template found for SessionsController#create, rendering head :no_content
但如果输入的值正确,我想将其重定向到欢迎/主页路径。
怎么做?
P.S:我有 user_id、user_email 和 otp_secret_key 列的用户表 提前致谢
【问题讨论】:
-
你在 SessionsController 中有这个 create 方法吗?还要检查你是否在 routes.rb 中添加了所有路由
-
是的,这是在会话控制器中,并且此方法中提到的所有路由都有效。如果我只是将代码编写为 `user = User.find_by(email: params[:session][:email ]) 如果 user.present? redirect_towelcome_home_path' 它会转到该路径。我无法从浏览器中获取 otp 并从数据库中检查它
-
您的代码对我来说看起来不错。你检查过 params[:session][:otp_code] 返回什么吗?
-
我尝试像这样打印它 'puts params[:session][:otp_code]' 来检查它返回的内容,它会抛出
can't covert symbol to integer的错误 -
所以现在你现在问题出在哪里。这可能是因为您使用的是 :otp_code 但在您的参数中它的“otp_code”。我不确定这是否是确切的问题。通过此链接阅读更多相关信息api.rubyonrails.org/classes/ActiveSupport/…
标签: ruby-on-rails session