【问题标题】:Replace default authentication strategy in Padrino-Warden替换 Padrino-Warden 中的默认身份验证策略
【发布时间】:2013-02-14 09:33:04
【问题描述】:

我正在努力替换 Padrino-Warden gem 的默认 :password 策略。 我认为我需要为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 一起很好地工作。

【问题讨论】:

    标签: ruby padrino warden


    【解决方案1】:

    您需要指示典狱长经理何时使用该策略。更新您传递给use 方法的strategies 键,以反映您想要启用哪些策略以及它们应该运行的顺序。你可以这样做:

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

    Warden wiki on github上有一堆例子

    【讨论】:

    • 感谢您的回答。最后,问题似乎出在 padrino-warden 身上,它对配置有太多的假设。删除它并只使用 Warden 就像一个魅力。
    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 2020-07-03
    • 2019-06-12
    • 1970-01-01
    • 2011-04-19
    • 2017-05-20
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多