Omniuth:env ['omniauth.origin']在使用OmniAuth.config.full_host时不可用

时间:2012-05-17 21:32:46

标签: ruby-on-rails devise omniauth

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

我的解决方案是拥有一个身份验证网址,这样当用户尝试使用omniauth登录任何联属网站时,回调网址就是一个标准网址(即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 app凭据。您会注意到,当您使用Facebook进行身份验证时,参数和原点都会正确传递。但是,如果取消注释config / initializers.omniauth.rb中的full_host配置选项并重新启动应用程序,您会注意到在使用Facebook进行身份验证后,您将被重定向到正确的URL,但不再传递参数和原始数据通过

https://github.com/dangerp/omniauth_origin_example

0 个答案:

没有答案