我正在尝试弄清楚如何让用户在通过Devise注册或登录网站后返回原始页面。
例如:用户正在查看清单A.用户点击“注册”,成功注册(无确认)。但是,它们不是被重定向回根目录,而是返回到列表A。
我以前通过本地身份验证执行此操作,方法是将原始URL存储在会话中,然后成功登录,重定向到存储的URL,或者如果它为null,则继续执行默认页面。
我可以用Devise做同样的事情,还是有一种实现相同目标的首选方式?
答案
在我的脑子里乱了几个小时,然后张贴了一个SO问题,它在提交问题后几乎立刻就打了我。我是这样做的:
在我的应用程序控制器中,我嗅探查看URL中是否存在return_to参数。如果有,我在会话中设置。
然后,我在应用程序控制器中覆盖after_sign_in_path_for以重定向到存储的会话值或root_path。
这是我的application_controller.rb的相关部分:
class ApplicationController < ActionController::Base
before_filter :check_for_manual_return
def check_for_manual_return
session[:return_to] = params[:return_to] if !params[:return_to].nil?
end
def after_sign_in_path_for(resource)
return session[:return_to] || root_path
end
end