我創建了自己的守望者戰略,使用Devise。它與Devise :: Strategies :: DatabaseAuthenticatable非常相似,實際上它從它繼承並重新實現了身份驗證!移除守望者戰略 - 如何確保原始devise_authenticable策略不見了
我的問題是,我想確保最初的devise_authenticable Warden戰略不復存在。這並不在Warden會嘗試的策略列表中,因爲它實際上是一個安全問題。那可能嗎?
我創建了自己的守望者戰略,使用Devise。它與Devise :: Strategies :: DatabaseAuthenticatable非常相似,實際上它從它繼承並重新實現了身份驗證!移除守望者戰略 - 如何確保原始devise_authenticable策略不見了
我的問題是,我想確保最初的devise_authenticable Warden戰略不復存在。這並不在Warden會嘗試的策略列表中,因爲它實際上是一個安全問題。那可能嗎?
根據我的人工檢查和測試,這在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)
我只是實現這一點。設計將嘗試列表中的每個策略,直到一個成功。
對我來說,我並沒有替換:database_authenticatable策略,而是將我的策略添加到列表的開頭,並彈出:database_authenticatable off在現有列表的末尾。
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
到目前爲止,它似乎工作正常。 – Pablo