注册后基于导航的重定向



我的网站允许用户自由浏览到需要登录以继续使用服务的地步(键入"注册"按钮并完成注册过程(。

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

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

  • 表格中隐藏的参数?听起来很烦人,可以一直跟踪此参数(并在出现错误等时将其保留(
  • 基于会话的信息(某种"智能引用" URL(
  • 页面访问(例如,使用ahoy.js(

以及最后一个相关页面的"跟踪"?在控制器中?在视图中为JS代码?

有什么技巧可以这样做?

通过隐藏的表单字段和会话都有好处。使用控制器中的会话是最简单的,您可以在开发方面进行跟踪,但是如果用户有多个选项卡打开,则如果它们在选项卡之间跳跃,则可能会导致奇数页面流。在这里,隐藏表格字段效果更好,但维护更令人讨厌。我倾向于使用会话方法,并在控制器操作中执行类似以下操作:

#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_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

相关内容

  • 没有找到相关文章

最新更新