2011-08-11 11 views
18

誰でもサインアップしてからログインすることができるため、ログイン後までユーザーがロールの識別ができないため、Deviseのauthorization_checkをスキップするのは意味がありませんか?cancan skip_authorization_check for Devise認証

私は、このregistrations_controllerを使ってDevise登録コントローラーを継承し、それをコントローラー・ディレクトリーに入れました。

class Users::RegistrationsController < Devise::RegistrationsController 
    skip_authorization_check 
end 

routesファイルへの変更:

devise_for :users, :controllers => { :registrations => "registrations" } 

を私も何かが欠けている:あなたの助けを

This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check. 

感謝を。

+0

でCANCANのドキュメントで明らかにされています以前の質問には、アプリの正しいものです。ありがとう。 – Jay

+0

@Hosemeyer、私は別の質問であなたの助言に従うことができる前に、この問題を克服する必要があります。ご協力いただきありがとうございます。 – Jay

答えて

38

簡単な解決策

check_authorization :unless => :devise_controller? 

あなたはいくつかの点で、手動ですべてのコントローラにcheck_authorizationを入れて持っている場合は、あなたのアプリにセキュリティホールを忘れて開きます。 Cancanで認証する必要のないコントローラを明示的にホワイトリストに登録する方がよいでしょう。

これは、私はこの問題を乗り越えるとき、私はあなたの答えかどうかを確認するつもりです@RyanBiggは、

https://github.com/ryanb/cancan/wiki/Ensure-Authorization

EDIT

class ApplicationController < ActionController::Base 
    check_authorization :unless => :do_not_check_authorization? 
    private 
    def do_not_check_authorization? 
    respond_to?(:devise_controller?) or 
    condition_one? or 
    condition_two? 
    end 

    def condition_one? 
    ... 
    end 

    def condition_two? 
    ... 
    end 
end 
+0

ありがとうbradgonesurfing +1。私がこのコードを改訂してテストするために戻ったとき、あなたの方法ですべてがうまくいくなら、受け入れられた答えを変更します。 – Jay

+0

答えはまだBigg氏が(-1) – bradgonesurfing

+0

で得点をつけていることです。問題私は、デバイスコントローラに加えて、スキップしたいコントローラが2つあります。私はそれらを追加するために条件を変更することができませんでした。私はそれらの中に 'skip_authorization_check'を置くことができましたが、すべての例外を処理したアプリケーション内に1つの場所しかないと良いでしょう。 – Jay

関連する問題