无论何处定向到登录页面,都会重定向到上一页
我正在使用Rails 3.2和Authlogic。 我有以下代码:
class ApplicationController < ActionController::Base private def store_location session[:return_to] = request.url end def redirect_back_or_default(default) redirect_to(session[:return_to] || default) session[:return_to] = nil end end class UserSessionsController [:new, :create] before_filter :require_user, :only => :destroy def new @user_session = UserSession.new @header_title = "Login" end def create @user_session = UserSession.new(params[:user_session]) if @user_session.save flash[:success] = "Login successful!" redirect_back_or_default root_url else render 'new' end end def destroy current_user_session.destroy flash[:success] = "Logout successful!" redirect_back_or_default root_url end end
这段代码很通用。 当我们使用before_filter
:
before_filter :require_user, :only => [:new, :edit, :update, :create]
它将自动store_location
并将我们重定向回正确的页面。 但是,我该怎么做:
- 我在
posts/1
中没有require_user
。 - 我单击顶部导航栏上的登录链接。
- 它显示登录页面。
- 登录后,我将被重定向回
posts/1
而不是root_url
。
在sessions控制器new
操作中直接调用store_location
。
# user_sessions_controller.rb def new store_location if session[:return_to].blank? @user_session = UserSession.new @header_title = "Login" end
这将首先检查会话哈希中的现有return_to
对。 您不希望覆盖它,以防万一,例如,由于密码错误,用户被重定向到new
操作。
如果已经从require_user
调用了store_location
这也将跳过store_location
。
成功重定向后,您必须从sessions哈希中删除 return_to
对; 设置为零是不够的:
# application_controller.rb def redirect_back_or_default(default) redirect_to(session.delete(:return_to) || default) end
我添加了一个store_referrer_location
来使其工作:
# application_controller.rb class ApplicationController < ActionController::Base private def store_referrer_location session[:return_to] = request.referrer end end # user_sessions_controller.rb class UserSessionsController < ApplicationController def new store_referrer_location if session[:return_to].blank? @user_session = UserSession.new @header_title = "Login" end ... def destroy store_referrer_location if session[:return_to].blank? current_user_session.destroy flash[:success] = "Logout successful!" redirect_back_or_default root_url end end
- Rails和Authlogic:每个用户只允许一个会话?
- 使用authlogic更改密码 – validation不捕获空白输入
- 使用OpenID,Twitter或Facebook进行Rails 3身份validation
- Authlogic:为#<User获取一个未定义的方法`password':
- AuthLogic表单给出了错误的validation错误 – 为什么?
- Rails中的会话,子域和authlogic问题
- Rails + Authlogic @current_user问题 – “显示”方法不再有效
- 使用新的openid登录authlogic创建新用户
- Rails authlogic密码哈希算法仅使用ruby