【发布时间】:2017-05-26 23:41:26
【问题描述】:
我在 Rails API 应用程序中有两种守望者策略,用于基本身份验证和令牌身份验证。
initializers/warden.rb
Warden::Strategies.add(:auth_token, AuthTokenStrategy)
Warden::Strategies.add(:basic_auth, BasicAuthStrategy)
config/application.rb
config.middleware.insert_after ActionDispatch::Callbacks, Warden::Manager do |manager|
manager.default_strategies :auth_token, :basic_auth
manager.failure_app = UnauthorizedController
end
这两种策略都实现了#valid?
class BasicAuthStrategy < ::Warden::Strategies::Base
def valid?
auth.provided? && auth.basic?
end
...
end
和
class AuthTokenStrategy < ::Warden::Strategies::Base
def valid?
auth.provided? && !auth.basic? && headers['HTTP_AUTHORIZATION'].start_with?('Bearear')
end
...
end
我想用令牌发出请求,守望者尝试 BasicAuthStrategy 然后它尝试 AuthTokenStrategy mas,它在第一个之后结束。它忽略了一种策略。为什么?
PS:我没有使用设计。
【问题讨论】:
标签: ruby-on-rails ruby warden