user_signed_in rails personalizar ruby-on-rails devise warden

ruby-on-rails - personalizar - rails admin



¿De qué están compuestos los datos del alcaide en una sesión de Rails/Devise? (1)

Cuando inicia sesión en un user (nombre de modelo de user Devise), se crea una clave "warden.user.model_name.key" que en su caso es "warden.user.user.key" .

Por ejemplo:

{ warden.user.user.key => [[1], "$2a$10$KItas1NKsvunK0O5w9ioWu"] }

dónde

1 es el id del usuario que ha iniciado sesión.

$2a$10$KItas1NKsvunK0O5w9ioWu aka long-random-string es la contraseña parcial encriptada del usuario con id 1 .

Puedes verificar esto yendo a la rails console y ejecutando

User.find(1).encrypted_password ## => "$2a$10$KItas1NKsvunK0O5w9ioWuWp4wbZ4iympYMqVCRmmvTGapktKqdMe"

ACTUALIZAR

¿Podría decirme algo más sobre esta contraseña parcial encriptada? ¿Por qué es parcial y no está lleno?

Para responder a su pregunta anterior en el comentario, Devise almacena la contraseña encrypted_password parcial en la sesión invocando el método authenticatable_salt . Devise almacena la contraseña encrypted_password parcial ya que es más confiable en lugar de exponer la contraseña cifrada completa en la sesión (aunque esté cifrada). Es por eso que los primeros 30 caracteres [0,29] de encrypted_password se extraen y almacenan en la sesión.

# A reliable way to expose the salt regardless of the implementation. def authenticatable_salt encrypted_password[0,29] if encrypted_password end

Puedes ver el código para authenticatable_salt aquí.

¿Dónde / cuándo se usa? ¿Lo usa Devise, o Rails, o ambos?

Devise utiliza con fines de autenticación para verificar si un usuario en particular está conectado o no. El caso de uso ideal sería, cómo una aplicación Rails en particular realiza un seguimiento de cómo un usuario inicia sesión cuando se solicita una nueva página. Como las solicitudes HTTP son sin estado, ¿sería imposible decir que una solicitud dada realmente provino de ese usuario en particular que inició sesión? Esta es la razón por la que las sesiones son importantes ya que permitirían a la aplicación mantener un seguimiento del usuario que inició sesión de una solicitud a otra hasta que la sesión expire.

Los "datos" en una sesión de Rails se ven así:

{"warden.user.user.key" => [[1], "long-random-string"]}

1 es el ID de usuario. ¿Cuál es la cadena aleatoria larga?

¿Es esto algo manejado / usado por Rails, o Devise?