tutorial rails gratis ejemplos descargar curso and ruby-on-rails ruby http

ruby-on-rails - gratis - ruby on rails tutorial



ImplementaciĆ³n de "Recordarme" en una aplicaciĆ³n Rails (8)

El complemento restful_authentication tiene una buena implementación de esto:

http://agilewebdevelopment.com/plugins/restful_authentication

Mi aplicación Rails tiene un cuadro de inicio de sesión con una casilla de verificación "recordarme". Los usuarios que marcan esa casilla deben permanecer conectados incluso después de cerrar su navegador. Llevo un registro de si los usuarios han iniciado sesión almacenando su identificación en la sesión del usuario.

Pero las sesiones se implementan en Rails como cookies de sesión, que no son persistentes. Puedo hacerlos persistentes:

class ApplicationController < ActionController::Base before_filter :update_session_expiration_date private def update_session_expiration_date options = ActionController::Base.session_options unless options[:session_expires] options[:session_expires] = 1.year.from_now end end end

Pero eso parece un truco, lo cual es sorprendente para una funcionalidad tan común. ¿Hay alguna forma mejor?

Editar

La respuesta de Gareth es bastante buena, pero todavía me gustaría una respuesta de alguien familiarizado con Rails 2 (debido a que es único CookieSessionStore ).



Esto funcionó como un encanto para mí:

http://squarewheel.wordpress.com/2007/11/03/session-cookie-expiration-time-in-rails/

Ahora mis sesiones de CookieStore caducan después de dos semanas, por lo que el usuario debe enviar sus credenciales de inicio de sesión nuevamente para poder iniciar sesión de forma persistente durante otras dos semanas.

Básicamente, es tan simple como:

  1. incluyendo un archivo en el directorio de proveedores / complementos
  2. establecer el valor de vencimiento de la sesión en el controlador de la aplicación usando solo una línea

Iría por Devise para una brillante solución de autenticación para rieles.


Le sugiero que eche un vistazo al complemento RESTful_Authentication, que tiene una implementación de esto, o simplemente cambie su implementación para usar RESTful Authentication_plugin. Hay una buena explicación sobre cómo usar este complemento en Railscasts:

railscasts # 67 restful_authentication

Aquí hay un enlace al complemento en sí

restful_authentication


Pasé un tiempo pensando en esto y llegué a algunas conclusiones. Las cookies de sesión de Rails son a prueba de manipulaciones de forma predeterminada, por lo que realmente no tiene que preocuparse por la modificación de una cookie en el cliente.

Esto es lo que hice:

  • La cookie de sesión está configurada para ser de larga duración (aproximadamente 6 meses)
  • Dentro de la tienda de sesiones
    • Una fecha ''caduca el'' que se establece para iniciar sesión + 24 horas
    • ID de usuario
    • Authenticated = true para poder permitir sesiones de usuario anónimas (no es peligroso debido a la protección contra manipulaciones de cookies)
  • Agrego un before_filter en el controlador de la aplicación que verifica la parte ''caduca en'' de la sesión.

Cuando el usuario marca la casilla "Recordarme", simplemente configuro la fecha de sesión [: expireson] para iniciar sesión + 2 semanas. Nadie puede robar la cookie y permanecer conectado para siempre o enmascararse como otro usuario porque la cookie de sesión de rails es a prueba de manipulaciones.


Seguramente no debería extender la cookie de sesión para que dure mucho.

Aunque no trata específicamente con los rieles, este artículo se esfuerza un poco para explicar las mejores prácticas de ''recordarme''.

En resumen, deberías:

  • Agregue una columna adicional a la tabla de usuario para aceptar un valor aleatorio grande
  • Establezca una cookie de larga duración en el cliente que combine la identificación de usuario y el valor aleatorio
  • Cuando se inicia una nueva sesión, verifique la existencia de la cookie de id / value y autentique al nuevo usuario si coincide.

El autor también recomienda invalidar el valor aleatorio y restablecer la cookie en cada inicio de sesión. Personalmente, no me gusta, ya que no puedes permanecer conectado a un sitio en dos computadoras. Tendería a asegurarme de que mi función de cambio de contraseña también restableciera el valor aleatorio, bloqueando las sesiones en otras máquinas.

Como nota final, vale la pena seguir los consejos que da sobre cómo hacer que ciertas funciones (cambio de contraseña / cambio de correo electrónico, etc.) no estén disponibles para sesiones autenticadas automáticamente, pero rara vez se ven en el mundo real.


Tenga en cuenta que no desea conservar su sesión, solo su identidad. Creará una nueva sesión para ellos cuando regresen a su sitio. En general, solo asigna un GUID al usuario, lo escribe en su cookie y luego lo usa para buscarlo cuando vuelva. No use su nombre de usuario o ID de usuario para el token, ya que podría adivinarse fácilmente y permitir a los visitantes astutos secuestrar las cuentas de otros usuarios.