【问题标题】:Rails - redirect to don't save historyRails - 重定向到不保存历史记录
【发布时间】: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


    【解决方案1】:

    我找到了原因。它与后端无关。由于我的形式:

    <div class="login_form">
      <%= form_with model:@user, url:user_session_path do |f| %>
      ...
    </div>
    

    默认情况下form_withdata-remote 属性附加到表单。因此,表单将使用 Ajax 提交。这就是为什么这段历史丢失了。因此,为了解决我的问题,我通过在表单中​​添加:local: true 选项来禁用默认功能。它有效。

    <div class="login_form">
      <%= form_with model:@user, url:user_session_path, local: true do |f| %>
      ...
    </div>
    

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多