2

我有一种情况,我的生产 rails 3.2 应用程序在多个域上运行。我正在设置omniauth 身份验证(版本1.1.0,如果重要,也使用设计2.1.0)以跨这些域工作。不幸的是,许多 oauth 提供商(例如 Facebook)一次只允许与一个域集成,或者要求您指定要使用的每个回调 URL。这对于这个用例是不切实际的,因为域名不断被添加。

我的解决方案是有一个单一的身份验证 URL,这样当用户尝试使用omniauth 登录任何附属网站时,回调 URL 是一个单一的标准 URL(即 auth.example.com)。

我能够让omniauth 集成正常工作,并且我可以允许用户对auth.example.com 域进行身份验证。下一步是将它们连同某种身份验证密钥一起送回它们的来源地。我env['omniauth.origin']用来确定用户的原始位置,但由于某种原因,每当我使用OmniAuth.config.full_host选项集重新启动 rails 服务器时,此变量都会变为空白。

长话短说:env['omniauth.origin']只要我不在OmniAuth.config.full_host初始化程序中使用,我就可以在我的回调控制器中正常访问。但是,我不知道如何在没有它的情况下进行跨域身份验证。

编辑:我创建了一个小示例应用程序来演示该问题。您必须在 config/initializers/omniauth.rb 中填写您自己的 Facebook 应用程序凭据。您会注意到,当您使用 facebook 进行身份验证时,参数和来源已正确传递。但是,如果您取消注释 config/initializers.omniauth.rb 中的 full_host 配置选项并重新启动应用程序,您会注意到在通过 Facebook 进行身份验证后,您将被重定向到正确的 URL,但不再传递参数和原始数据通过。

https://github.com/dangerp/omniauth_origin_example

4

0 回答 0