繁体   English   中英

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

[英]Omniauth: How to set authentication provider details at runtime

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

这里有两个问题:

  1. 如何在运行时更改Facebook的Omniauth凭据?
  2. 如何拦截对facebook的呼叫,检查域并相应地设置凭据? 由于Omniauth使用Rack Middleware,因此之前的过滤器不起作用。

任何建议都非常感谢!

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

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

现在的问题是,即使应用程序不想在运行时设置凭证,它也必须为回调添加一个条件,就像request.env [“omniauth.auth”]一样,以避免在执行时执行回调代码它被称为第一次。 解决方案可能是向Omniauth构建器添加一个参数,如:dynamic_provider,如果已设置,则只调用应用程序。

〜每个Nico回答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM