繁体   English   中英

Rails - 正确地重定向到上一页

[英]Rails - redirecting to previous page properly

在我的应用程序中,我试图强制用户登录以执行某些操作。 当他们在未签名时尝试执行这些操作时,会将其重定向到“登录”页面,一旦他们登录,他们就会被重定向回他们尝试访问的页面。 我使用下面的代码完成了所有这些工作。

控制器代码

if !(signed_in?)
  session[:return_to] = newcompany_path
  redirect_to signin_path
  flash[:notice] = "You must be signed in to add companies."
else
      @company = Company.new
  @primary_field = @@fields
end

...

redirect_path = session[:return_to]
if user && user.authenticate(params[:session][:password])
    sign_in user
    session[:return_to] = nil
    if (redirect_path == nil)
      redirect_to user
    else
      redirect_to redirect_path
    end
else

我遇到的问题是,如果用户点击登录页面而没有实际登录,则session[return_to]变量未正确清除,如果他们稍后返回登录,则会将其重定向到错误的页面。

那么,如何设置它,如果用户点击登录页面,会话[:redirect_to]变量会被重置?

您可以在查询字符串参数而不是会话中传递return_to路径,并将其与登录表单一起提交,以便它仅适用于该表单,而不是后续请求。

重定向到登录表单时,它看起来像:

redirect_to signin_path(return_to: newcompany_path)

然后,在您的登录表单中,确保包含一个带有return_to值的隐藏字段,如:

hidden_field_tag :return_to, params[:return_to]

然后在您的控制器操作中进行登录,您将检查params[:return_to]而不是session[:return_to]以获取所需的路径。

这是你在找什么?

redirect_to request.referrer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM