编写自定义 OmniAuth 策略

Pau*_*son 5 openid ruby-on-rails devise omniauth

我有一个带有 Devise 的 Rail 4 应用程序。我正在尝试配置 OmniAuth 以使用我们公司的 Ping OpenID Connect IdP。看来我必须在机架中间件中编写一个 OmniAuth 策略。

我拿了'omniauth-digitalocean' gem(有他们的策略)并小心地用另一个名字替换了'digitalocean'的所有引用。我小心地尊重所有情况以符合惯例。

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

gem 'omniauth-private', :path => "/var/lib/gems/2.0.0/gems/omniauth-private-0.1.0"
Run Code Online (Sandbox Code Playgroud)

运行“捆绑安装”时没有出现错误。

我在使用 'rake db:migrate' 时收到此错误:

fatal: Not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)

我相信这是由我的自定义 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.
Run Code Online (Sandbox Code Playgroud)

这与我在确定需要编写 n Omniuth 策略之前收到的错误消息相同,所以我认为这意味着我的 gem 没有被识别。

所以我不确定到底发生了什么。我想我正在为这个私人宝石而苦苦挣扎。但这也可能是 OmniAuth 问题。

任何人都曾获得过使用 OmniAuth 的私有 OpenID Connect IdP?

Pau*_*son 1

关于“Not a git repo”的“致命”错误来自于 gems 使用“git ls”这一事实。只需运行“git init”就可以修复它。我这样做了,然后提交到 github。

通过正确加载自定义 gem 可以修复“找不到名为...的策略”错误。我通过将这一行添加到我的 Gemfile 中来做到这一点:

gem 'omniauth-private', :path => "/var/lib/gems/2.0.0/gems/omniauth-private-0.1.0
Run Code Online (Sandbox Code Playgroud)