2012-06-21 54 views
7

她的是我的application.rb中RoR |設計重定向循環,因爲康康舞的授權

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    rescue_from CanCan::AccessDenied do |exception| 
    flash[:error] = "You must first login to view this page" 
    session[:user_return_to] = request.url 
    redirect_to "https://stackoverflow.com/users/sign_in" 
    end                                     

end 

這將重定向使用到登錄頁面,如果存取遭拒是罰球,並且用戶沒有登錄(「工作得很好」),但是一旦登錄,將會導致重定向循環,如果登錄但cancan不能授權,因爲登錄頁面將通過會話[:user_return_to] = request.url將其重定向回用戶。

問題是:如果用戶登錄但未獲得授權,如何處理此邏輯。

+0

如果您使用devise進行身份驗證,您可以在用戶登錄時檢查'current_user' – krichard

回答

13

我添加了一些條件來完成這項工作。

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    #Redirects to login for secure resources 
    rescue_from CanCan::AccessDenied do |exception| 

     if user_signed_in? 
     flash[:error] = "Not authorized to view this page" 
     session[:user_return_to] = nil 
     redirect_to root_url 

     else    
     flash[:error] = "You must first login to view this page" 
     session[:user_return_to] = request.url 
     redirect_to "https://stackoverflow.com/users/sign_in" 
     end 

    end 
end 
相關問題