我正在使用 Devise 来处理用户身份验证。我已在另一个 Controller View 中放置了登录表单。当用户通过此表单登录时,我想将他们重定向回该页面。我尝试通过以下方法来完成此任务:
应用程序 Controller
after_filter :store_location
def store_location
return unless request.get?
if (request.path != "/users/sign_in" &&
request.path != "/users/sign_up" &&
request.path != "/users/password/new" &&
request.path != "/login" &&
request.path != "/signup" &&
request.path != "/users/password/edit" &&
request.path != "/users/confirmation" &&
request.path != "/users/sign_out" &&
!request.xhr?) # don't store ajax calls
session[:previous_url] = request.fullpath
end
end
def after_sign_in_path_for(resource)
if request.referer == streams_url(page: params[:page])
session[:previous_url] || root_path
else
root_path
end
end
此代码的问题是,当用户从外部源访问链接或输入页面的完整地址时,它不起作用。我需要一个每次用户使用此特定表单登录时都有效的解决方案。
最佳答案
def after_sign_in_path_for(resource)
sign_in_url = new_user_session_url
if request.referer == sign_in_url
super
else
stored_location_for(resource) || request.referer || root_path
end
end
在application_controller中添加上面的内容。如果最后一个请求将登录,那么它将调用父请求。
关于ruby-on-rails - 将用户重定向回登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30587395/