Gitlab和omniauth-pam身份validation
基本上我按照这些说明添加自定义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 ' /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 `' config.ru:3:in `require' config.ru:3:in `block in ' /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 `' /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 `' /usr/local/lib64/ruby/gems/2.0.0/gems/passenger-4.0.23/helper-scripts/rack-preloader.rb:29:in `' /usr/local/lib64/ruby/gems/2.0.0/gems/passenger-4.0.23/helper-scripts/rack-preloader.rb:28:in `'
omniauth-pam的文档声明它不需要任何配置参数。 所以这个错误对我来说无法解释。
问题来自于config/initializers/devise.rb
如何设置config/gitlab.yml
定义的提供程序(通过始终传递至少两个参数,即使它们是nil
)以及omniauth/strategy.rb
(如何从任何提供者那里) ‘pam’inheritance)处理给定的参数(通过检查提供者声明的参数是否与传递的参数数相匹配)。
这种组合使得它期望在config/gitlab.yml
定义的提供者至少声明两个参数。
所以我必须在我的提供商中执行以下操作来解决此问题:
require 'omniauth' module OmniAuth module Strategies class YourProvider include OmniAuth::Strategy args [:arg1, :arg2] # <-- This is the line you need.
这很可能是gitlab中的一个错误,但上面是我的解决方法。
您可以通过分配omniauth-pam项目并将该行添加到lib/omniauth/strategies/pam.rb
。
然后在gitlab Gemfile
,你的gem行应该如下所示:
gem 'omniauth-pam', :git => 'https://github.com/vanthome/omniauth-pam.git'
这样,它将使用提供程序进行更改。 之后, 使用自定义提供程序时的其余说明仍然适用。
编辑:
我刚刚意识到还有另一种解决方法,不需要你分叉提供者代码。
在config/initializers/devise.rb
,在最外面的块的末尾添加以下行:
config.omniauth :pam
并从config/gitlab.yml
删除添加的提供程序行。
我建议你检查这个人做了什么:
https://github.com/raphendyr/gitlabhq/tree/pam
当我使用他的存储库来托管GitLab时,它的工作非常好。
它有点过时了,但是对于当前版本制作相同的补丁并不是一个大问题,如果这对你来说是个问题。
我必须让这个为我的大学工作。 看看我对Gitlab的拉取请求。 我能够在Ubuntu上使用PAM获得Gitlab的工作版本。
Gitlab拉请求#4706