3

私のセットアップ:Rails 3.0.9、Ruby 1.9.2、Devise 1.3.4、Warden 1.0.4

私は、カスタム戦略を認証することが可能であり、認証が成功したときにプロセスでデバイスユーザーを作成する必要がないかどうかを理解しようとしています。config.wardenブロックでは、認証は正常に機能しますが、Deviseユーザーを作成しないと、認証されません。私の理想的なシナリオでは、サードパーティプロバイダーに対して正常に認証してアプリにサインインするか(対応するDeviseユーザーレコードなしでDeviseを使用)、認証に失敗した場合はDeviseの標準ログインパスを試す必要があります。

これが私が機能したdevise.rbコードスニペットですが、認証が機能するためにdeviseユーザーを作成する必要があります。これは避けたいものです。

config.warden do |manager|
    manager.strategies.add(:custom_strategy) do
      def valid?
        params[:user] && params[:user][:email] && params[:user][:password]
      end

      def authenticate!
        ...perform authentication against 3rd party provider...
        if successful_authentication
          u = User.find_or_initialize_by_email(params[:user][:email])
          if u.new_record?
            u.app = 'blah'
            u.save
          end
          success!(u)
        end
      end
    end

manager.default_strategies(:scope => :user).unshift :custom_strategy
  end
4

2 に答える 2

0

これは、すべてのアクションがリソースのRESTfulルートを使用して実行されるデバイスの設計に反すると思います。そうは言っても、Wardenのsuccess!方法のコメントは次のように述べています。

# Parameters:
#   user - The user object to login.  This object can be anything you have setup to serialize in and out of the session

uでは、オブジェクトを、昔ながらのハッシュのように、ユーザーを表す他のオブジェクトに変更することはできませんか?

于 2012-03-11T08:13:20.363 に答える