Rails设计:登录后如何重定向用户

时间:2016-08-25 19:04:17

标签: ruby-on-rails redirect devise

如果我访问http://example.com,我首先进入登录页面,并在成功登录后进入主页。 如果我访问http://example.com/myusers,则在成功登录后,我希望被重定向到myusers页面而不是主页。

在阅读了几篇在线帖子后,我明白在我的application_controller.rb中我可以操作after_sign_in_path_for方法。我通过在此方法中添加特定网址对此进行了测试,并且在成功登录后我总是被重定向到该网址。

def after_sign_in_path_for(resource)
     "http://example.com/users"    
end

如何让此方法在登录前捕获用户请求的URL并相应地重定向用户?

2 个答案:

答案 0 :(得分:2)

Devise带有类似开箱即用的东西。作为故障情形的一部分,它存储最后一个请求。这"操作方法"应该帮助您解决方案。请注意,您需要在控制器的before_filter中调用此方法:

before_filter: authenticate_user!

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update#a-simpler-solution

答案 1 :(得分:1)

您可以将请求的网址存储在会话变量中。

session[:return_to] = request.original_url

您可以在应用程序控制器中的before_action :authorize方法内设置会话变量,这可能在其他地方有意义,具体取决于您的授权策略。

def authorize
  if current_user_authorized?
    # Authorized...
  else
    # Record the requested page URL and redirect to the login page.
    session[:return_to] = request.original_url
    redirect_to login_url, error: "Not authorized."
  end
end

要使用它,您可以写:

def after_sign_in_path_for(resource)
  session[:return_to] || root_url
end
相关问题