如果我访问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并相应地重定向用户?
答案 0 :(得分:2)
Devise带有类似开箱即用的东西。作为故障情形的一部分,它存储最后一个请求。这"操作方法"应该帮助您解决方案。请注意,您需要在控制器的before_filter中调用此方法:
before_filter: authenticate_user!
答案 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