Pregunta

Estoy usando la versión actual de restful_authentication que se encuentra en github y tengo un montón de problemas de sesión extraños. El servidor parece estar asignando de alguna manera sesiones a los usuarios que no debería ser. Esto solo ocurre cuando se cruza la barrera de cierre / cierre de sesión.

Aquí hay un ejemplo. Sin sesiones activas en el servidor, inicio sesión en una cuenta con el usuario A. En otra máquina, inicio sesión con el usuario B. Luego, cuando cierre la sesión del usuario B, en algún momento después de que ocurra la redirección de cierre de sesión, iniciaré sesión como usuario A. Desde este punto, puedo continuar navegando por el sitio como si hubiera iniciado sesión como ese usuario. Algo que he observado a través de los registros es que cuando ocurre este secuestro, los ID de sesión no son los mismos. El usuario A ha iniciado sesión en ambas sesiones, pero los ID de sesión son completamente diferentes. Este es solo un ejemplo de lo que podría pasar. No puedo reproducir el problema de forma confiable, ya que parece ser aleatorio.

No parece ser un síntoma del entorno o del servidor en el que se está ejecutando. Puedo reproducir el problema usando mestizo y pasajero. También lo he visto en desarrollo y producción. Estoy utilizando sesiones basadas en db en esta aplicación y se está ejecutando en Rails 2.1.1. Apliqué la opción de estado al llamar al generador. De lo contrario, no se han realizado otras modificaciones en la forma en que se manejan las sesiones.

Actualizar Aquí está el método ofensivo que vino directamente de restful_authentication.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end
¿Fue útil?

Solución 2

No sé si esto es tanto una respuesta como un problema. Todo lo que hice fue cambiar a sesiones basadas en cookies y todo funciona sin problemas.

Otros consejos

Esto puede suceder si usted (o los que escribieron restful_authentication) almacenan en caché al usuario actual en una variable de clase. He visto un montón de artículos que abogan por el uso de " User.current_user " ;, pero como las clases se almacenan en caché en todas las solicitudes, esto puede provocar la pérdida de la sesión.

¿Este sitio es remoto? ¿Está iniciando sesión en dos computadoras separadas en la misma red?

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