El mejor enfoque es hacerlo en forma Diseñar:.
siguiente se supone que está utilizando Idear módulo database_authenticable y los nombres de los usuarios modelo de usuario de la aplicación
1. Implemente un account_active? método.
Agregue la columna booleana account_active
en la tabla de usuarios o defina el método account_active?
en el modelo de usuario (puede elegir su propio nombre de método). Por ejemplo:
# app/models/user.rb
def account_active?
blocked_at.nil?
end
2. sobrescribir el método active_for_authentication?
en su modelo (Usuario).
# app/models/user.rb
def active_for_authentication?
super && account_active?
end
3. método Add que devuelve la traducción de mensajes flash.
Cuando active_for_authentication?
devuelve falso, Devise pregunta por qué su modelo está inactivo utilizando el método inactive_message
.
# app/models/user.rb
def inactive_message
account_active? ? super : :locked
end
Y eso es todo. No necesita preocuparse por sign_out
o redirect_to
usuario.
Por otra parte, el usuario está bloqueado de inmediato, con la siguiente petición, no después de señal siguiente en el
Más:. devise/authenticatable.rb.
Tenga en cuenta que esto tiene una debilidad: si un usuario está prohibido mientras ya están conectados, la prohibición no tendrá efecto hasta que se desconecten y vuelvan a iniciar sesión (lo que podría ser un tiempo prolongado). el usuario para desconectarse en el momento en que los prohíbe, o mover esta lógica a un 'before_action' en sus controladores en lugar de usar' after_sign_in_path_for'. – GMA
cuando prohíbe al usuario, simplemente agregue una línea más para cerrar sesión – enter08