2012-06-21 30 views
7

cô là application.rb tôiRoR | Vạch vòng lặp chuyển hướng vì Cancan phép

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 

này sẽ chuyển hướng sử dụng đến trang đăng nhập nếu AccessDenied là ném và người dùng không đăng nhập ("hoạt động độc đáo"), nhưng một khi đăng nhập nó sẽ gây ra một vòng lặp chuyển hướng nếu đăng nhập nhưng không được ủy quyền bởi cancan kể từ khi trang đăng nhập sẽ chỉ chuyển hướng chúng trở lại cho người dùng quyền trở lại thông qua phiên [: user_return_to] = request.url.

Câu hỏi đặt ra là: làm cách nào để xử lý logic này nếu người dùng đăng nhập nhưng không được ủy quyền.

+0

nếu bạn sử dụng để xác thực bạn có thể kiểm tra 'current_user' nếu người dùng đăng nhập hay không – krichard

Trả lời

13

Tôi đã thêm một điều kiện nhỏ để thực hiện công việc này.

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 
Các vấn đề liên quan