use*_*620 5 ruby-on-rails devise warden
我想知道如何使用设计实现自定义身份验证策略devise :token_authenticable.
我已经找到了关于如何使用这里devise :database_authenticatable涉及的模型的说明.
我试图验证的模型被命名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
Run Code Online (Sandbox Code Playgroud)
而在我config/initializers/devise.rb(也试过它没有:scope => :pupil):
config.warden do |manager|
manager.default_strategies(:scope => :pupil).unshift :auth_pupil_strategy
end
Run Code Online (Sandbox Code Playgroud)
所以这应该会导致用户不beeing能够登录,但不知何故,从切换时不应用此策略devise :database_authenticatable来devise :token_authenticable.
也许我只是错过了:scope这里的权利.
现在,这是奇怪的事情:每当用户输入无效令牌时,我的策略被调用并且"你不应该通过!" 退回.但是,当提供正确的令牌时,用户可以正常登录.
您的策略未被调用,因为您需要覆盖有效的?这个答案建议的方法;
但你也应该使用默认的策略方法,但是它的使用方式是另一种,让我们看看声明
def default_strategies(*strategies)
opts = Hash === strategies.last ? strategies.pop : {}
hash = self[:default_strategies]
scope = opts[:scope] || :_all
hash[scope] = strategies.flatten unless strategies.empty?
hash[scope] || hash[:_all] || []
end
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该方法应该接收一系列策略,而不仅仅是范围,使用 unshift 是一个聪明的技巧,可以将您的策略置于堆的顶部,但由于某种原因,在使用多个自定义策略时会出现意外的行为
希望有帮助
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |