我正在尝试使用Devise设置2个身份验证策略 标准的(:database_authenticable),如果这个失败,则对另一个远程服务器执行另一次尝试:remote(如http://4trabes.com/2012/10/31/remote-authentication-with-devise/所述)
如果我在我的devise.rb初始化器中添加config.warden块
config.warden do |manager|
manager.strategies.add(:remote, Devise::Strategies::RemoteAuthenticatable)
manager.default_strategies(:scope => :user).unshift :remote
end
然后:远程成为默认策略,但这不是我要找的...... 我想有第一个Devise :: Strategies :: DatabaseAuthenticatable然后如果它失败了Devise :: Strategies :: RemoteAuthenticatable
我知道有可能因为监狱长接受级联战略...... 如https://github.com/hassox/warden/wiki/Strategies使用策略所述..
但是我没有看到如何实现它......
答案 0 :(得分:1)
虽然我在这里没有具体的技术建议,但我可以报告,在2015年1月,我花了大约2天试图获得4trabes建议(上面和其他地方引用堆栈溢出),以实现绝对完整和破碎失败。我不清楚Devise中的远程身份验证实际上是否完全正常。我能够
答案 1 :(得分:0)
要使用策略,请通过声明时给出的标签来引用它。例如
env['warden'].authenticate(:password)
使用:密码策略。您可以使用多种策略,每种策略都将按顺序进行尝试,直到其中一个停止或没有停止。
env['warden'].authenticate(:password, :basic)
这将使用:密码,如果失败,那么:基本策略。
答案 2 :(得分:0)
设计初始化程序中的warden块定义了warden配置中的策略数组,
require 'devise/strategies/remote_authenticable'
config.warden do |manager|
manager.strategies.add(:remote, Devise::Strategies::RemoteAuthenticatable)
manager.default_strategies(:scope => :user).unshift :remote
end
然而:远程策略被列为第一个......
# warden.config[:default_strategies][:user] => [:remote, :rememberable, :database_authenticatable]
所以我修改了我的users / sessions_controller中的#createaction,将:remote移动到列表的末尾
# POST /resource/sign_in
def create
warden.config[:default_strategies][:user].push(warden.config[:default_strategies][:user].shift)
self.resource = warden.authenticate!(auth_options)
现在,用户身份验证以Devise(:rememberable,:database_authenticable)启动,如果失败,则尝试使用以下命令在远程服务器上进行身份验证:remote_authenticable