3

Deviseで使用するための独自のWarden戦略​​を作成しました。これはDevise::Strategies :: DatabaseAuthenticatableと非常によく似ており、実際にはそれを継承して再実装し、認証を行います。

私の問題は、元のdevise_authenticableWarden戦略​​がなくなっていることを確認したいということです。これは実際にはセキュリティの問題であるため、Wardenが試みる戦略のリストには含まれていません。それは可能ですか?

4

2 に答える 2

3

私の手動の検査とテストによると、devise.rb初期化子のこれは目標を達成します:

config.warden do |manager|
  strategies = manager.default_strategies(:scope => :user)
  strategies[strategies.index(:database_authenticatable)] = :alternative_strategy
end

そして、戦略はこのように実装されます(この質問の一部ではありませんが、矛盾する情報が見つかりました。これは、Rails 3.1、デバイス1.4.7、および監視員1.0.5を使用して機能したものです)。

class AlternativeStrategy < Devise::Strategies::Authenticatable
  def authenticate!
  end
end
Warden::Strategies.add(:alternative_strategy, AlternativeStrategy)
于 2011-09-26T08:18:08.217 に答える
0

私もこれを実装しました。Devise は、成功するまでリスト内の各戦略を試します。

私にとっては、:database_authenticatable 戦略を置き換えるのではなく、自分の戦略をリストの先頭に追加し、既存のリストの末尾から :database_authenticatable をポップしました。

config.warden do |manager|
  # Exiles::Devise::Strategies::BySite implemented in lib/.  It matches the stub in Pablo's answer
  manager.strategies.add( :by_site_auth, Exiles::Devise::Strategies::BySite )

  # add my strategy to the beginning of the list.
  manager.default_strategies(:scope => :user).unshift :by_site_auth

  # remove the default database_authenticatable strategy from the list
  manager.default_strategies(:scope => :user).pop
end
于 2013-04-12T19:50:16.427 に答える