我有一个可从2个域访问的rails应用程序。 Facebook要求我为每个域注册一个Facebook应用程序,并为每个域提供凭据。使用Omniauth,我只能指定在应用程序启动时设置的一组凭据。但是,我需要根据请求的主机为FB提供不同的凭据。
这里有两个问题:
任何建议都非常感谢!
答案 0 :(得分:0)
从评论中复制答案,以便从“未答复”过滤器中删除此问题:
我现在自己解决了这个问题。问题是fb策略要求 第二次回到fb获取访问令牌。在第二次通话中 使用了错误的凭据(在初始化程序中设置的凭据)。所以 我不得不修补OAuth2策略,以便调用它 再次使用rails app来设置第二次调用的运行时凭据。 在回调中,通常只处理响应表单 Omniauth,我设置凭据并返回404,除非 request.env [“omniauth.auth”]存在。这工作正常,但有一些 没有动态提供商的应用程序的副作用。
现在的问题是,即使应用程序不想在运行时设置凭据,它也必须为回调添加一个条件,就像request.env [“omniauth.auth”]一样,以避免回调代码在第一次调用时执行。解决方案可能是向Omniauth构建器添加一个参数,如:dynamic_provider,如果已设置,则只调用应用程序。
〜每Nico
回答答案 1 :(得分:0)
这个问题已经很老了,但仍然相关。现在,还可以在 OmniAuth 的设置阶段动态设置提供者详细信息。
例如:
Rails.application.config.middleware.use do
provider :example,
setup: ->(env) do
env['omniauth.strategy'].options[:foo] = env['rack.session']['foo']
env['omniauth.strategy'].options[:client_options][:site] = Something.dynamic('param')
end
end
来源:https://github.com/omniauth/omniauth/wiki/Dynamic-Providers