我正在使用设计来验证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应用程序中显示它。
答案 0 :(得分:0)
Warden :: Strategies.add方法是一种提供自定义策略的简单方法。您必须声明@authenticate!@方法。您可以提供@valid?@方法。有效方法应该返回true或false,具体取决于策略是否是请求的有效策略。
这来自warden strategie的文档:http://www.rubydoc.info/github/hassox/warden/Warden/Strategies/Base
因此,如果您想让它们专门工作,您可以继承并适应传递给应用程序的参数名称。