Pregunta

Tengo una aplicación Rails que se ejecuta en el puerto 3101 y lo puse a disposición de Internet a través de una configuración de Apache Reverse-Proxy (como la sugerida por Phusion en esta publicación de blog.

Estoy usando Disvise + Omniauth para manejar la autenticación de Facebook.

Pero cuando trato de autenticarme a través de Facebook, me redirigen a la URL: http://mydomain.com:3101/my_callback_path

Comienzo la aplicación Rails con passenger start -a 127.0.0.1 -p 3101 -d Y mi configuración de Apache es:

<VirtualHost *:80>
    ServerName mydomain.com

    PassengerEnabled off
    ProxyPass / http://127.0.0.1:3101/
    ProxyPassReverse / http://127.0.0.1:3101

    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
</VirtualHost>

He encontrado algunas respuestas como este y este Pero todos están destinados a configuraciones de Nginx.

He intentado usar un inicializador con OmniAuth.config.full_host = 'http://my domain.com' Pero me pregunto si no hay una configuración faltante en mi configuración de Apache (como las respuestas anteriores).

Gracias por adelantado.

¿Fue útil?

Solución

Eché un vistazo a la fuente de Omniauth y descubrí que el mecanismo de devolución de llamada utiliza internamente un método llamado full_host que busca la variable de configuración y luego construye la primera parte del URI: eche un vistazo a oa-core-0.2.6/lib/omniauth/strategy.rb

La variable de configuración puede ser una cadena (como en su caso), o un proc, o nulo (o cualquier otra cosa). En el último caso, la solicitud URI se analiza, se corta y se devuelve.

Creo que no podemos resolver nuestro problema común simplemente estableciendo una variable de entorno en Apache (esto probablemente debería hacerse en un nivel inferior, dentro de la pila de aplicaciones de Ruby), pero después de alguna experimentación, he encontrado que esto funciona lo suficientemente bien. yo:

OmniAuth.config.full_host = lambda do |env|
    scheme         = env['rack.url_scheme']
    local_host     = env['HTTP_HOST']
    forwarded_host = env['HTTP_X_FORWARDED_HOST']
    forwarded_host.blank? ? "#{scheme}://#{local_host}" : "#{scheme}://#{forwarded_host}"
end

Otros consejos

Tuve el mismo problema. Se resolvió mediante la configuración

**proxy_set_header        Host            <proxy-domain-name>;**



  location / {
  proxy_pass  http://127.0.0.1:3000;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        Host            <domain name>;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
 }

Con respecto a la redirección de Facebook, pasé algún tiempo investigando el valor de la URL real a la que redirigía la devolución de llamada, por lo que tuve que solucionarlo en Nginx Conf. Para descubrir eso, mire la URL en el enlace y vea el valor de "Redirect_uri" Obtener valor variable en lugar de centrarse en el error que envió en la página principal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top