Omniauth:如何在运行时设置身份验证提供者详细信息

Nic*_*ico 5 rack middleware ruby-on-rails omniauth

我有一个可以从2个域访问的Rails应用程序。Facebook要求我为每个域注册一个Facebook应用,并为我提供每个域的凭据。使用Omniauth,我只能指定一组在应用程序启动时设置的凭据。但是,我将根据请求的主机为FB提供不同的凭据。

这里有两个问题:

  1. 如何在运行时更改Facebook的Omniauth凭据?
  2. 如何截获对Facebook的呼叫,检查域并相应地设置凭据?之前的过滤器将不起作用,因为Omniauth使用机架中间件。

任何建议都非常感谢!

Dre*_*awn 1

复制评论中的答案,以便从“未回答”过滤器中删除此问题:

我现在自己解决了这个问题。问题在于,fb 策略第二次回调 fb 以获取访问令牌。在第二次调用中使用了错误的凭据(在初始化程序中设置的凭据)。因此,我必须修补 OAuth2 策略,以便它再次调用 Rails 应用程序,为第二次调用设置运行时凭据。在回调中,通常只处理 Omniauth 的响应,我设置凭据并返回 404,除非存在 request.env["omniauth.auth"]。这工作得很好,但对于没有动态提供程序的应用程序有一些副作用。

现在的问题是,即使应用程序不想在运行时设置凭据,它也必须向回调添加一个条件,例如 if request.env["omniauth.auth"] 以避免在以下情况下执行回调代码:这叫做第一次。解决方案可能是向 Omniauth 构建器添加一个参数,例如 :dynamic_provider,并且仅在设置时调用应用程序。

〜根据尼科的回答