ruby-on-rails - logger - rails console
¿Cómo puedo desconectar a un usuario de la consola de Rails? (6)
Mis usuarios de diseño son "database_authenticatable" y "token_authenticatable". He intentado eliminar el campo "authentication_token" en la base de datos para ese usuario desde la consola, pero todavía parecen poder usar su token de autenticación. Eliminar al usuario funciona completamente, pero no quiero llegar tan lejos.
Editar: para mayor claridad. Quiero usar la consola de rieles para desconectar a un usuario. es decir, ejecuta la rails console
y luego algún comando.
Idear proporcionar métodos de ayuda para hacer estas cosas.
user = User.find(params[:id])
sign_in user
sign_out user
Espero que esto ayude.
No soy seguidor del patrón sign_out @user
porque, al menos para la versión de sign_out @user
que estoy usando, eso sign_out @user
la sign_out @user
del usuario actual, independientemente del argumento por el que lo paso. Si está almacenando sesiones en su base de datos, puede hacer esto:
@user.update_attributes(current_sign_in_token: "")
TBH: No creo que sea la mejor manera de hacerlo, pero es la mejor forma que he visto en mi propia investigación.
Puede crear un enlace de cierre de sesión en views-> layouts-> application.html.erb como: -
<= link_to ''Log Out'', destroy_user_session_path, method: :delete %>
Me funcionó, espero que también lo haga para otros.
Puede usar los ayudantes que otros han mencionado después de incluir el módulo necesario:
include Devise::Controllers::SignInOut
fuente: Módulo: Devise :: Controladores :: SignInOut
También hay otra pregunta SO en la que alguien comparte un método que no implica el uso de ayudantes de Devise aquí .
Si está utilizando Devise, puede usar lo siguiente en su consola de rieles . Esto funciona perfecto para mí como en mi aplicación si solo está utilizando 1 sesión por cuenta de usuario. Estoy almacenando mis sesiones en redisDB.
user = User.first
user.update_attributes(unique_session_id: "")
Todo lo que tenía que hacer era borrar mis usuarios unique_session_id para ese usuario y los rieles expulsan al usuario de la sesión.
Pero para sesiones múltiples para la misma cuenta de usuario esto no funciona.
Si desea borrar todas las sesiones de usuario, puede hacer lo siguiente desde la terminal
rake db:sessions:clear