替换Padrino-Warden中的默认身份验证策略

时间:2013-02-14 09:33:05

标签: ruby padrino warden

我正在努力取代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不能很好地协同工作。

1 个答案:

答案 0 :(得分:2)

您需要指示看守经理何时使用该策略。更新您传递给strategies方法的use密钥,以反映您要启用的策略以及应该运行的顺序。你可以这样做:

use ::Warden::Manager do |manager|
  manager.scope_defaults :default, 
    strategies: [:udid, :password], 
    action: 'sessions/unauthenticated'
end

Warden wiki on github

上有很多例子