7

Hers は私の 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 を介して、それらをユーザーにリダイレクトするだけです。

問題は、ユーザーがログインしているが承認されていない場合、このロジックをどのように処理するかです。

4

1 に答える 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
于 2012-06-21T16:15:42.250 に答える