Удаление стратегии Warden - как убедиться, что оригинальная стратегия devise_authenticable исчезла - PullRequest
2 голосов
/ 25 сентября 2011

Я создал свою собственную стратегию Warden для использования с Devise. Он очень похож на Devise :: Strategies :: DatabaseAuthenticatable и на самом деле он наследуется от него и повторно реализует аутентификацию!

Моя проблема заключается в том, что я хочу убедиться, что оригинальная стратегия devise_authenticable Warden исчезла. Этого нет в списке стратегий, которые попробует Warden, потому что это проблема безопасности. Это возможно?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

Согласно моим ручным проверкам и тестам, это в инициализаторе devise.rb достигает цели:

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

И стратегия реализована таким образом (не является частью этого вопроса, но я нашел там противоречивую информацию, и именно эта работает для меня с использованием Rails 3.1, devise 1.4.7 и warden 1.0.5):

class AlternativeStrategy < Devise::Strategies::Authenticatable
  def authenticate!
  end
end
Warden::Strategies.add(:alternative_strategy, AlternativeStrategy)
0 голосов
/ 12 апреля 2013

Я только что реализовал это.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...