我正在尝试通过 Google 帐户集成简单的 OpenID 身份验证。我正在使用omniauth gem,并且在我的本地开发系统(Win7,ruby 1.8.7-p302,rails 2.3.8,omniauth 0.1.5)上一切正常。
当我将它部署到我的主机(HostGator)时,问题就显现出来了。该应用程序(mongrel)从端口 12002 开始,并通过 HostGator 的 cPanel 配置为从子域之一重写:
RewriteCond %{HTTP_HOST} ^subdomain.mycompany.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.subdomain.mycompany.com$
RewriteRule ^(.*)$ "http\:\/\/127\.0\.0\.1\:12002\/$1" [P,L]
当浏览器进入 /auth/open_id 时,它被重定向到 Google 进行授权,但它的 return_to 地址是 subdomain.mycompany.com:12002 这当然是不正确的,因为 Apache 没有在 12002 上监听。我已经设法修补 OmniAuth::Strategies ::OpenID 和 Rack::OpenID 因此它们在没有端口的情况下组装地址,但现在在用户访问确认后的最后阶段,如果属于:
Routing Error
No route matches "/403.shtml" with {:method=>:get}
我想问题是我的网站地址在其他授权请求参数中被编码(某种哈希)以避免