2013-05-02 10 views
5

devise :token_authenticableを使用して、deviseでカスタム認証戦略を実装する方法が不思議です。Deviseのカスタム認証戦略:token_authenticable

devise :database_authenticatablehere)を使用してモデルを作成する方法については既に説明しました。

認証しようとしているモデルの名前は、Pupilです。

Warden::Strategies.add(:auth_pupil_strategy) do 
    # missing valid? method indicates this strategy is always applied 

    def authenticate! 
    fail!("YOU SHALL NOT PASS!") 
    end 
end 

そして、私のconfig/initializers/devise.rb(も:scope => :pupilせずにそれを試してみました)中:だからここ は(config/initializers/custom_auth.rbにあります)私の現在の戦略である

config.warden do |manager| 
    manager.default_strategies(:scope => :pupil).unshift :auth_pupil_strategy 
end 

だからこれは、ユーザーにつながるはずできbeeingていませんログインするには、devise :database_authenticatableからdevise :token_authenticableに切り替えると、この戦略は適用されません。

多分、私はちょうど右の:scopeが不足しています。

ここでは奇妙なことがあります:ユーザーが無効なトークンを入力するたびに、私の戦略が呼び出され、「あなたは合格してはいけません!返されます。 しかし、正しいトークンが提供された場合、ユーザーはきちんとログインすることができます。

+0

恥を支援しますablあなたにこれを手伝ってもらう。あなたは解決策を見つけることができましたか? – seanhussey

+0

多分http://kyan.com/blog/2013/10/11/devise-authentication-strategiesが役立ちますか? –

+0

あなたは 'valid?'を実装する必要があります。あなたの戦略のための方法。それが何かを解決するかどうかはわかりませんが、確かにあらゆる戦略の前提条件です(例えば、John Beynonのリンクを参照してください)。 – conciliator

答えて

0

有効な値を上書きする必要があるため、戦略が呼び出されていません。メソッドはthis回答提案として;

しかし、また、デフォルトの戦略メソッドを使用する必要があり、それが使用されることを意図していたしかし、方法は、別のは、あなたがこの方法を想定している参照の戦略の配列を受け取ることができるようdeclaration

def default_strategies(*strategies) 
    opts = Hash === strategies.last ? strategies.pop : {} 
    hash = self[:default_strategies] 
    scope = opts[:scope] || :_all 

    hash[scope] = strategies.flatten unless strategies.empty? 
    hash[scope] || hash[:_all] || [] 
end 

を見てみましょうです、ないただのスコープは、アンシフトを使用すると、ヒープの一番上にあなたの戦略を置く巧妙なハックではありませんが、複数のカスタム戦略に取り組んでいるとき、何らかの理由で予期しない動作があり

希望は誰もいないことを

関連する問題