私のセットアップ: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