Javascript 注册后基于导航的重定向

Javascript 注册后基于导航的重定向,javascript,ruby-on-rails,navigation,ruby-on-rails-5,Javascript,Ruby On Rails,Navigation,Ruby On Rails 5,我的网站允许用户自由浏览,直到他们需要登录才能继续使用该服务(点击“注册”按钮并完成注册过程) 一旦用户注册,我想将他们重定向到他们浏览的最后一个有趣的页面:可能是单击注册按钮之前的页面,或者更复杂的页面。例如,假设用户浏览一个“核心”内容页面,然后转到“关于我们”页面,然后尝试注册,我宁愿将这些用户重定向到“核心”内容页面 我想知道最好的方法是什么 表单中隐藏的参数?在表单中始终跟踪此参数(并在出现错误时保持此参数),这听起来很烦人 基于会话的信息(某种“智能推荐人”url) 页面访问(例如

我的网站允许用户自由浏览,直到他们需要登录才能继续使用该服务(点击“注册”按钮并完成注册过程)

一旦用户注册,我想将他们重定向到他们浏览的最后一个有趣的页面:可能是单击注册按钮之前的页面,或者更复杂的页面。例如,假设用户浏览一个“核心”内容页面,然后转到“关于我们”页面,然后尝试注册,我宁愿将这些用户重定向到“核心”内容页面

我想知道最好的方法是什么

  • 表单中隐藏的参数?在表单中始终跟踪此参数(并在出现错误时保持此参数),这听起来很烦人
  • 基于会话的信息(某种“智能推荐人”url)
  • 页面访问(例如使用Ahoy.js)
以及在何处/何时对最后一个相关页面进行“跟踪”?在控制器中?在视图中显示为JS代码


有这样做的提示吗?

通过隐藏表单字段和会话都有好处。在控制器中使用会话对您来说是最简单的跟踪开发过程的方法,但是如果用户打开了多个选项卡,那么如果它们在选项卡之间跳转,可能会导致奇怪的页面流。这就是隐藏表单字段工作得更好,但维护起来更烦人的地方。我倾向于使用sessions方法,并在控制器操作中执行以下操作:

#This will store the page they're coming from to get to this action.
session[:interesting_page] = request.env["HTTP_REFERER"] || root_path

#Or store the current interesting page within the interesting page's controller action
 session[:interesting_page] = request.original_url

一种方法是简单地使用HTTP\u REFERER
在登录时重定向<代码>HTTP_REFERER
当然是有限的,因为有些客户端不发送它。但您也可以争辩说,如果客户机不发送头,他们就不希望被跟踪

另一个解决方案是使用会话:

class ApplicationController
  after_action :set_referrer, unless: :user_signed_in?

  def set_referrer
    session[:referrer] = if request.post?
      request.fullpath + '/new'
    elsif request.patch? || request.put?
      request.fullpath + '/edit'
    else
      request.fullpath
    end
  end
end

class SessionController
  def create
    @user = User.find_by(params[:email])
                .try(:authenticate, params[:password])
    if @user
      render :new
    else
      redirect_to session[:referrer] || root_path
    end
  end
end

HTTP_referer只包含以前访问过的页面,对吗?在我的情况下,它没有帮助,因为我想重定向到的页面可能在历史上任意遥远。如果您想存储任意访问,您需要单独使用会话或cookie。或者,如果您想成为最前沿的,您甚至可以使用WebStorage。感谢您对这两种方法的相关评论!隐藏输入法要求您使用POST(如那些#!€WebForms…)执行所有操作,或使用javascript附加路径?是@max,隐藏字段方法仅在用户基于某些特定场景提交表单后,您才需要控制页面流。当用户单击链接时,您也可以通过params和“get”请求来执行此操作,但这往往会导致维护噩梦,我真的想不出哪种情况会比其他两种方法更有益。可能会有一些带有method=“get”的html表单。或者至少在rails上,您可以轻松地添加
method::get
以获得此行为。我相信我会同意会议的内容。如果我错了,请纠正我,但会话仍然跨选项卡保留?我的意思是,在加载一个新页面后,您可以在以前使用的任何选项卡中获得会话?唯一奇怪的情况是用户在一个单独的标签页上填写注册表时一直浏览。嘿,我在用Cucumber/Capybara测试这个
会话时遇到了一些问题。如果你也能帮忙的话我问了另一个问题