【发布时间】:2013-05-02 10:20:07
【问题描述】:
我想知道如何使用 devise :token_authenticable 来实现自定义身份验证策略。
我已经找到了有关如何使用 devise :database_authenticatable 对模型进行操作的说明,该模型已涵盖在 here 中。
我试图验证的模型名为Pupil。
所以这是我目前的策略(位于config/initializers/custom_auth.rb):
Warden::Strategies.add(:auth_pupil_strategy) do
# missing valid? method indicates this strategy is always applied
def authenticate!
fail!("YOU SHALL NOT PASS!")
end
end
在我的config/initializers/devise.rb 中(也试过没有:scope => :pupil):
config.warden do |manager|
manager.default_strategies(:scope => :pupil).unshift :auth_pupil_strategy
end
所以这应该会导致用户无法登录,但不知何故,从devise :database_authenticatable 切换到devise :token_authenticable 时,此策略并未应用。
也许我只是在这里错过了正确的:scope。
现在,奇怪的是:每当用户输入无效令牌时,我的策略就会被调用,并且“你不能通过!”被退回。 但是,当提供正确的令牌时,用户可以正常登录。
【问题讨论】:
-
很遗憾没有人能帮助你解决这个问题。你找到解决办法了吗?
-
你必须实现一个“有效?”方法为您的策略以及。我不知道这是否能解决任何问题,但它肯定是任何策略的先决条件(参见例如 John Beynon 的链接)。
标签: ruby-on-rails devise warden