我正在努力取代Padrino-Warden宝石的默认:密码策略。 我想的方式我需要掌握warden的管理器实例,所以我可以设置默认策略,但我不知道如何在app.rb文件中执行此操作
现在app.rb看起来像这样
register Padrino::Warden
Warden::Strategies.add(:udid) do
def valid?
puts "udid strat"
params[:udid]
end
def authenticate!
user = User.get(:udid => params[:udid])
user.nil? ? fail!("Could not log in") : success!(user)
end
end
Warden::Manager.serialize_into_session do |user|
user.id
end
Warden::Manager.serialize_from_session do |id|
User.get(id)
end
use ::Warden::Manager do |manager|
manager.scope_defaults :default,
strategies: [:password],
action: 'sessions/unauthenticated'
end
哪个不起作用。监狱环境看起来仍然如此
Warden::Proxy:70352196940440 @config={:default_scope=>:default, :scope_defaults=>{}, :default_strategies=>{:_all=>[:password]}, :intercept_401=>true, :failure_app=>Dagis}
如果我在config.ru中配置warden,它将为warden设置正确的环境但是我怀疑Padrino提供的会话中间件与Warden不能很好地协同工作。
答案 0 :(得分:2)
您需要指示看守经理何时使用该策略。更新您传递给strategies
方法的use
密钥,以反映您要启用的策略以及应该运行的顺序。你可以这样做:
use ::Warden::Manager do |manager|
manager.scope_defaults :default,
strategies: [:udid, :password],
action: 'sessions/unauthenticated'
end
上有很多例子