编写自定义的OmniAuth策略

时间:2015-06-26 20:22:41

标签: ruby-on-rails devise openid omniauth

我有Devise的Rail 4应用程序。 我正在尝试配置OmniAuth以使用我们的企业Ping OpenID Connect IdP。 看来我必须在Rack Middleware中编写一个OmniAuth策略。

我选择了'omniauth-digitalocean'宝石(有他们的策略),并仔细替换了“数字海洋”的所有参考资料。另一个名字。我谨慎地尊重所有情况以符合惯例。

我现在遇到的问题是我似乎有一个私人宝石。 我把它添加到我的Gemfile中:

gem 'omniauth-private', :path => "/var/lib/gems/2.0.0/gems/omniauth-private-0.1.0"

我在运行'捆绑安装'。

时没有出错

我在“rake db:migrate':

”中收到此错误
fatal: Not a git repository (or any of the parent directories): .git

我认为这是由我的自定义gem中的.gitignore文件引起的。 我删除了.gitignore文件,现在我得到了:

Devise::OmniAuth::StrategyNotFound: Could not find a strategy with name `Private'. Please ensure it is required or explicitly set it using the :strategy_class option.

在我弄清楚我需要编写n Omniuth策略之前,这是我得到的相同错误消息,所以我认为这意味着我的宝石未被识别。

所以我不确定究竟发生了什么。我想我正在与这个私人宝石挣扎。但它也可能是一个OmniAuth问题。

有人曾经使用过OmniAuth私有OpenID Connect IdP吗?

4 个答案:

答案 0 :(得分:2)

我有同样的"无法找到名称的策略......"使用我的自定义Omniauth OAuth2策略。

我根据这些说明https://github.com/intridea/omniauth-oauth2创建了一个自定义策略,并将我的文件保存在config / initializers中 - 然后将该模块加载到ruby boot上。

我觉得我应该能够将它存储在lib /文件夹中,但是不能解决文件名或文件夹结构应该是什么!

答案 1 :(得分:1)

关于“不是git repo”的“致命”错误来自于宝石使用'git ls'的事实。只运行“git init”应该修复它。我做了那个然后致力于github。

“找不到具有名称的策略...”错误通过正确加载自定义gem来解决。我通过将这一行添加到我的Gemfile中来做到这一点:

gem 'omniauth-private', :path => "/var/lib/gems/2.0.0/gems/omniauth-private-0.1.0

答案 2 :(得分:1)

您需要添加:

require 'strategies/private'

到config / devise.rb的顶部。这指向/lib/strategies/private.rb

中的策略文件

答案 3 :(得分:0)

在设计/初始化程序文件中检查并确保您具有正确的名称 您要配置的身份验证示例:

 config.omniauth :facebook, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' 
 config.omniauth :private, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' 
 config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'