[英]Redirect to previous page wherever it is directed to the login page
我正在使用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 < ApplicationController
before_filter :require_no_user, :only => [: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
。 在會話控制器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
,它也會跳過。
重定向成功后,您必須從會話哈希中刪除 return_to
對; 將其設置為nil是不夠的:
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.