2010-06-23 19 views
5

Estoy tratando de guardar el http_referer para que pueda enviar al usuario a esa url después de que haya iniciado sesión. En este momento tengo un before_filter en mis controladores que los envía a una página de inicio de sesión si no se ha creado una sesión a través de un redirect_to. Sin embargo, cuando miro HTTP_REFERER, es nulo (mientras que 'REQUEST_URI' me devuelve de donde vengo).Ruby on Rails - request.env ['HTTP_REFERER'] devuelve nil

Gracias.

Respuesta

11

HTTP_REFERER es una cabecera HTTP establecido por el navegador en la solicitud que contiene la dirección de la página web anterior de la que fue seguido de un enlace a la página solicitada actualmente. No se establecerá al navegar directamente a una página.

REQUEST_URI (también disponible a través de request.request_uri()) es el identificador uniforme de recursos utiliza para acceder al Rails controlador/acción y debe siempre puede ajustar.

arroje este código de depuración en su vista:

<ul> 
<% request.env.each do |item| %> 
    <li><%= item[0] %> : <%= item[1] %></li> 
<% end %> 
</ul> 

Si HTTP_REFERER no está configurado, asegúrese de que está navegando a la página a través de un enlace o redirigir y ver si se establece a continuación.

También hay una posibilidad de que su navegador es not setting la cabecera HTTP_REFERER. Asegúrese de no tener un complemento que afecte esto. Puede usar un add-on ingenioso de Firefox llamado Tamper Data para ver los encabezados que se envían.

+0

Sí, que no muestra, sin embargo, el código que me dio muestra que la solicitud se pasa a través de mi servidor de seguridad interno que es más probable filtrado de los datos que necesito .... Gracias por el código! – Naujpr

+0

@Naujpr: He actualizado mi respuesta para incluir un enlace a Tamper Data, que puede ayudarlo a resolver el problema. ¡Buena suerte! – Awgy

5

No importa qué solución te ocurrió, tiene que ser capaz de manejar el caso árbitro vacía, ya que el cliente tiene la opción de aplicar o no lo especifica. (Está desactivado cuando estás en la navegación privada de Safari y en el modo de incógnito de Chrome, por ejemplo)

En Rails puedes usar redirect_to :back, que usará HTTP_REFERER si está configurado, o generará un error en caso contrario.

Al usar redirect_to: volver, si no hay referencia, se producirá RedirectBackError. Puede especificar algún comportamiento alternativo para este caso rescatando RedirectBackError.