防止warden身份验证中的策略级联

时间:2015-07-18 13:15:35

标签: ruby-on-rails authentication devise warden

我正在使用设计来验证Android应用“通过API”的用户身份。我有两个策略用于通过密码进行身份验证,另一个用于通过otp进行身份验证(我使用active_model_otp gem。我的问题是我不想级联这些策略。例如,如果我的otp stategy有效且失败验证它不应该尝试通过密码验证并返回无效的otp消息,反之亦然otp。
这是我的设计初始化文件:

    config.warden do |manager|
     manager.intercept_401 = false
     manager.strategies.add(:password, Devise::Strategies::Password)
     manager.strategies.add(:otp, Devise::Strategies::Otp)
     manager.default_strategies(scope: :user).unshift :password, :otp
   end

此外,我还为密码策略提供了这样的参数:

http://myserver/sessions.json?user[email]=myuser@mail.com&user[password]=12345678

对于otp策略来说就像这样:

http://myserver/sessions.json?user[email]=myuser@mail.com&user[otp]=12345678  

此外,我无法弄清楚这个fail!("Message")方法返回字符串“Message”的位置,以便我可以在我的Android应用程序中显示它。

1 个答案:

答案 0 :(得分:0)

  

Warden :: Strategies.add方法是一种提供自定义策略的简单方法。您必须声明@authenticate!@方法。您可以提供@valid?@方法。有效方法应该返回true或false,具体取决于策略是否是请求的有效策略。

这来自warden strategie的文档:http://www.rubydoc.info/github/hassox/warden/Warden/Strategies/Base

因此,如果您想让它们专门工作,您可以继承并适应传递给应用程序的参数名称。