ruby on rails - tutorial - Implementación de "Recordarme" en una aplicación Rails




ruby tutorial (6)

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 ).



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


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.





http