【问题标题】:Gitlab and omniauth-pam AuthenticationGitlab 和 omniauth-pam 身份验证
【发布时间】:2013-11-12 20:01:53
【问题描述】:

基本上我按照这些说明添加自定义omniauth 提供程序:

https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md#using-custom-omniauth-providers

我想使用omniauth-pam:

https://github.com/nickcharlton/omniauth-pam

添加 gem 并在 gitlab.yml 中配置后:

providers:
    - { name: 'pam' }

它不再以这个错误开始:

Received wrong number of arguments. [nil, nil] (ArgumentError)
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/omniauth-1.1.4/lib/omniauth/strategy.rb:143:in `initialize'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_dispatch/middleware/stack.rb:43:in `new'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_dispatch/middleware/stack.rb:43:in `build'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_dispatch/middleware/stack.rb:113:in `block in build'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_dispatch/middleware/stack.rb:113:in `each'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_dispatch/middleware/stack.rb:113:in `inject'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_dispatch/middleware/stack.rb:113:in `build'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/engine.rb:475:in `app'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/application/finisher.rb:31:in `block in <module:Finisher>'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/initializable.rb:30:in `instance_exec'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/initializable.rb:30:in `run'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/initializable.rb:55:in `block in run_initializers'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/initializable.rb:54:in `each'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/initializable.rb:54:in `run_initializers'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/application.rb:136:in `initialize!'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/railties-3.2.15/lib/rails/railtie/configurable.rb:30:in `method_missing'
  /sync1/gitlab/config/environment.rb:5:in `<top (required)>'
  config.ru:3:in `require'
  config.ru:3:in `block in <main>'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/rack-1.4.5/lib/rack/builder.rb:51:in `instance_eval'
  /sync1/gitlab/vendor/bundle/ruby/2.0.0/gems/rack-1.4.5/lib/rack/builder.rb:51:in `initialize'
  config.ru:1:in `new'
  config.ru:1:in `<main>'
  /usr/local/lib64/ruby/gems/2.0.0/gems/passenger-4.0.23/helper-scripts/rack-preloader.rb:105:in `eval'
  /usr/local/lib64/ruby/gems/2.0.0/gems/passenger-4.0.23/helper-scripts/rack-preloader.rb:105:in `preload_app'
  /usr/local/lib64/ruby/gems/2.0.0/gems/passenger-4.0.23/helper-scripts/rack-preloader.rb:150:in `<module:App>'
  /usr/local/lib64/ruby/gems/2.0.0/gems/passenger-4.0.23/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/local/lib64/ruby/gems/2.0.0/gems/passenger-4.0.23/helper-scripts/rack-preloader.rb:28:in `<main>'

omniauth-pam 的文档指出它不需要任何配置参数。 所以这个错误对我来说是无法解释的。

【问题讨论】:

  • 如下所述,从 gitlab.yml 中删除提供程序并将其添加到 devise.rb 是否适合您?

标签: ruby-on-rails omniauth gitlab


【解决方案1】:

问题来自config/initializers/devise.rb 如何设置在config/gitlab.yml 中定义的提供程序(通过始终传递至少两个参数,即使它们是nil )以及omniauth/strategy.rb 如何设置omniauth/strategy.rb(任何提供程序,如'pam'继承)处理给定的参数(通过检查提供者声明的参数是否与传递的参数数量匹配)。

这种组合使得它期望config/gitlab.yml 中定义的提供者声明至少两个参数。

所以我必须在我的提供程序中执行以下操作来解决这个问题:

require 'omniauth'
module OmniAuth
    module Strategies
        class YourProvider
            include OmniAuth::Strategy
            args [:arg1, :arg2]  # <-- This is the line you need.

这很可能是 gitlab 中的一个错误,但以上是我的解决方法。

您可以通过 fork omniauth-pam 项目并将该行添加到 lib/omniauth/strategies/pam.rb 来亲自尝试。

然后在 gitlab Gemfile 中,您的 gem 行应该如下所示:

gem 'omniauth-pam', :git => 'https://github.com/vanthome/omniauth-pam.git'

这样,它将使用提供程序进行您的更改。在那之后,the rest of the instructions when using custom providers 仍然成立。

编辑:

我刚刚意识到还有另一种解决此问题的方法,不需要您分叉提供程序代码。

config/initializers/devise.rb 中,在最外层块的末尾添加以下行:

config.omniauth :pam

并从config/gitlab.yml 中删除添加的提供者行。

【讨论】:

    【解决方案2】:

    我建议你检查一下这个人做了什么:

    https://github.com/raphendyr/gitlabhq/tree/pam

    因为我使用他的存储库来托管 GitLab,它工作得非常好。

    它有点过时了,但是如果它是你的问题,为当前版本制作相同的补丁不是一个大问题。

    【讨论】:

    • 很好的提示,谢谢。我很奇怪为什么他不将补丁贡献给 gitlab ......从长远来看,分叉和修补是没有好处的。你使用的是他的版本还是最近的版本?
    • 嗨!是的,没错,但我不知道为什么它没有被合并:github.com/gitlabhq/gitlabhq/pull/5292 另外我刚刚在他的 fork 上看到了这个分支 - github.com/raphendyr/gitlabhq/tree/6-3-pam 希望它很快就会出现在 gitlab public repo 中。
    【解决方案3】:

    我必须让这个为我的大学工作。看看我对 Gitlab 的拉取请求。我能够在 Ubuntu 上使用 PAM 获得 Gitlab 的工作版本。

    Gitlab pull request #4706

    【讨论】:

    • 好的,已经有PR了(见上面的回答),虽然作者更新了两次,但还是不接受。所以我会拭目以待。谢谢指出!
    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多