RoR | Devise 因 cancan 授权而产生重定向循环问题

7
这是我的application.rb文件。
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 "/users/sign_in"
  end                                                                                                                                                  

end

如果 AccessDenied 抛出,并且用户没有登录,这将重定向用户到登录页面(“很好地工作”),但是一旦登录,如果登录但未经 cancan 授权,它将导致重定向循环,因为登录页面只会通过 session[:user_return_to] = request.url 将其重定向回用户。

问题是:如果用户已登录但未经授权,我该如何处理此逻辑。


如果您使用Devise进行身份验证,您可以检查current_user以确定用户是否已登录。 - krichard
1个回答

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 "/users/sign_in"
      end 

    end 
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接