Estoy usando Devise para la autenticación en mi aplicación.
¿Cómo prohíbo a ciertos usuarios iniciar sesión? ¿Cómo deshabilitar a un usuario?
Estoy usando Devise para la autenticación en mi aplicación.
¿Cómo prohíbo a ciertos usuarios iniciar sesión? ¿Cómo deshabilitar a un usuario?
Respuestas:
Hazlo asi:
Cree una columna llamada is_active
para el User
modelo.
Luego agregue el siguiente código al User
modelo:
class User < ActiveRecord::Base
#this method is called by devise to check for "active" state of the model
def active_for_authentication?
#remember to call the super
#then put our own check to determine "active" state using
#our own "is_active" column
super and self.is_active?
end
end
ACTUALIZAR
Como señala Matt Huggins, el método ahora se llama active_for_authentication?
( Documentación )
active_for_authentication?
lugar de solo active?
.
the method is now called active_for_authentication?
significa que el nombre de su método debe ser en active_for_authentication?
lugar de active?
.
active_for_authentication?
tiene que ser un método público!
super and self.is_active?
se puede simplificar asuper && is_active?
Agregue una columna al User
modelo:allowed_to_log_in
.
Luego agregue esto a /app/models/user.rb
:
def active_for_authentication?
super and self.allowed_to_log_in?
end
Si desea informar al usuario con un mensaje personalizado, también puede agregar esto:
def inactive_message
"You are not allowed to log in."
end
Creo que es bastante importante porque el mensaje estándar de Devise dice:
"Tu cuenta aún no está activada."
Eso es confuso para los usuarios y la verdadera razón es que les ha "prohibido" iniciar sesión.
Quiere hacer una autorización, no una autenticación. Sin embargo, Devise solo hace autenticación.
Es decir, devise solo te dice que un usuario es quien dice ser.
Necesita algo más para prohibirle el uso del sitio.
La autorización es un tema popular y hay una lista completa de gemas que pueden ayudarte:
http://ruby-toolbox.com/categories/rails_authorization.html
Haz tu elección.
Parece que te puede interesar el cancán