【发布时间】:2021-04-01 10:00:50
【问题描述】:
我正在为我的应用程序使用 Devise,并且我自定义会话控制器以通过 otp 代码(我的控制器)处理登录:
class SessionsController < Devise::SessionsController
def new
end
def create
mobile_number = User.set_number(params[:mobile_number], params[:country_code])
@user = User.active.fetch_user(nil, mobile_number)
if @user
otp = Sms.send_sms(mobile_number)
if otp == false
flash[:alert] = 'OTP Sending failed'
else
@user.otp = otp
@user.otp_generated_at = Time.zone.now
redirect_to sessions_otp_form_path(id: @user.id) if @user.save
end
else
flash[:alert] = 'User not found'
end
end
end
路线:
devise_for :users,
path: '',
path_names: { sign_in: 'login', sign_out: 'logout', registration: 'signup', sign_up: '' },
controllers: { sessions: 'sessions', registrations: 'registrations', passwords: 'passwords'}
devise_scope :user do
post '/send_otp', to:'sessions#send_otp'
get 'sessions/otp_form'
我的看法:
<div class="login_form">
<%= form_with model:@user, url:user_session_path do |f| %>
...
</div>
从主页,我点击登录按钮进入/login页面,如果我输入正确的数字,我将被重定向到otp表单(sessions/otp_form),我可以使用otp代码登录.而问题就出现在这里,当我在otp形式时,我想通过点击浏览器返回到上一页(我输入电话号码的登录页面),但是浏览器而不是返回到上一个URL(在这种情况下是/login)它后退两步进入主页。
我检查了浏览器(firefox 和 chrome),login 路径没有被存储。
为了确保问题不是来自redirect_to,我创建了一个简单的表单,然后提交 -> 重定向 -> 在这种情况下,我可以逐步返回上一个 URL。我还创建了一个简单的应用程序,它使用没有任何自定义的 Devise,它运行良好(不会丢失以前的路径)。目前,我不确定我的代码发生了什么。任何意见和建议将不胜感激。
【问题讨论】:
标签: authentication browser devise ruby-on-rails-6