6

API にアクセスするためのカスタム認証戦略を作成したいと考えています。カスタム戦略を無視して、Deviseのサンプル コードに従いました。

問題は有効なのですか?私のApi戦略のメソッドは決して実行されません(それをこじ開けようとすることに基づいています)。

私のコード:

module Devise
  module Strategies
    class Api < Devise::Strategies::Base
      def valid?
        binding.pry
        params[:request_source] == 'api'
      end

      def authenticate!
        #do stuff here

        if user
          success!(user)
        else
          warden.custom_failure!
          render :json=> {:success=>false, :message=>"Error with your login or password"}, :status=>401
        end
      end
    end

    Warden::Strategies.add(:api, Devise::Strategies::Api)

  end
end

そしてデバイス初期化子で:

config.warden do |manager|
  manager.default_strategies.unshift :api
end

私が何をしても、Devise は常にデフォルトの戦略を使用しているようです。私の知る限り、これで十分なはずです...

- - - -編集 - - - -

デバイス初期化子の一番上に、次のような戦略が必要です。

require Rails.root.join('app/devise/strategies/api')

クラス内に pry 呼び出しを配置すると、pry セッションが開始されるため、戦略がブート時にロードされることはわかっています。ただし、メソッド内の Pry 呼び出しは実行されません。:-S

4

2 に答える 2

4

答えが見つかりました!

私はこれを使用しなければなりませんでした:

config.warden do |manager|
  manager.default_strategies(scope: :user).unshift :api
end

それを機能させるために。奇妙なことに、ネットで見たサンプル コードの多くはそれを使用していませんでした :-S

于 2012-08-22T16:34:30.523 に答える
0

カスタム戦略が必要になるのはいつですか? 例と比較すると、イニシャライザではなくそこに戦略を追加しています。default_strategies に追加する前に、イニシャライザの上部でカスタム戦略を要求して、ロードされていることを確認してみてください。

それでも問題が解決しない場合は、default_strategies を確認するために authenticate が呼び出されるデバイス自体に一時的な puts ステートメントを追加することを恐れないでください。つまり、デバッガーの使用にまだ慣れていない場合は、そのようにします。

于 2012-08-21T23:05:54.827 に答える