Cómo hacerse pasar por un usuario en una aplicación Sails de Rails

“Suplantar” significa que una persona imita el comportamiento o las acciones de otra persona. Es muy común en las aplicaciones SaaS que su personal de soporte necesite suplantar a los usuarios y realizar algunas operaciones en nombre del usuario suplantado.

El personal de soporte / administrador debe poder iniciar sesión sin problemas en la cuenta del otro usuario sin usar las credenciales de ese usuario, pretendiendo ser el usuario normal.

Aquí viene la gema ‘ pretendiente ‘ para cumplir el propósito maravillosamente. Es realmente fácil aprovechar la función de suplantación en cualquier aplicación de ruby ​​on rails con una configuración mínima. Según el pretendiente README,

Funciona con Rails 2.3+ y cualquier sistema de autenticación: idear, Authlogic y Sorcery, por nombrar algunos.

Aquí están los pasos para integrar:

  • Agregue la gema en su archivo de gemas y ejecute la instalación del paquete.

gema ‘pretendiente’

  • Agregue lo siguiente en el controlador de aplicación:

suplanta: usuario

En algún lugar de su área de visualización accesible, enumere todos los usuarios y coloque un enlace contra cada usuario con el siguiente ayudante:

= link_to “Suplantar”, start_impersonate_path (user_id: user.id)

Asegúrese de que esta ruta en configure en routes.rb

alcance ‘/ admin’ hacer
get ‘start_impersonate’ => ‘admin # start_impersonate’, como: ‘start_impersonate’
get ‘stop_impersonating’ => ‘admin # stop_impersonating’, como: ‘stop_impersonate’
fin

Cree acciones de suplantación para comenzar a suplantar y dejar de suplantar como se muestra a continuación en Admin Controller:

def start_impersonate
usuario = User.find_by (id: params [: user_id])
impersonate_user (user) if user.present?
redirect_to root_path
fin
def stop_impersonating
stop_impersonating_user
redirect_to admin_path
fin

Cuando se ejecuta el método de inicio de suplantación, el administrador se convertirá en verdadero_usuario y el usuario suplantado se convertirá en actual_usuario . Le gustaría tener una indicación de qué usuario está suplantando en la interfaz de usuario en alguna parte. Agregue las siguientes líneas en el diseño de la aplicación (encabezado)

Usted () ha iniciado sesión como

Este script auxiliar generaría un enlace para dejar de suplantar y mostrar qué usuario se hace pasar.

Caso especial

Estábamos usando una gema invitable para crear otros usuarios en la aplicación. Entonces, cuando el usuario suplantado invita a algún otro usuario, el invitado_por_id del usuario administrador (usuario_verdadero) se guarda en la base de datos para ese usuario en lugar del usuario suplantado.

Para solucionar esto, agregue el siguiente método en el controlador de la aplicación para que funcione.

def authenticate_inviter!
usuario actual
fin

Este método devuelve el usuario original y, por lo tanto, la columna invite_by_id ahora tendría la identificación de referencia del usuario original y no la del usuario administrador.