2011-05-14 17 views
83

Estoy usando Devise para autenticación en mi aplicación.Devise - ¿Cómo prohíbo que ciertos usuarios inicien sesión?

¿Cómo prohíbo que ciertos usuarios inicien sesión? ¿Qué tipo de deshabilitar a un usuario?

+36

Esta es una pregunta válida y se vuelva a abrir -. OP está pidiendo "¿Cómo me prohíbo ciertos usuarios de iniciar sesión en "using [idear] (https://github.com/plataformatec/devise). – Zabba

Respuesta

118

hacerlo de esta manera:

Crear una columna llamada is_active para el modelo User.

A continuación, añada el siguiente código para el modelo User:

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 

ACTUALIZACIÓN

Como señala Matt Huggins, el método se llama ahora active_for_authentication? (Documentation)

+0

gracias! eso es lo que he necesitado –

+17

Parece que esto ha cambiado de nombre a 'active_for_authentication?' En lugar de 'active?'. –

+0

¡Gracias por la actualización! –

0

Quiere hacer la autorización, no la autenticación. Sin embargo, idear solo hace authetication.
I.e. el dispositivo solo te dice que un usuario es quien dice ser.
Necesita algo más para prohibirle el uso del sitio.

autorización es un tema popular y hay toda una lista de las gemas que pueden ayudarle con ella:
http://ruby-toolbox.com/categories/rails_authorization.html
una serie de opciones.

+5

Sé la diferencia. El caso es que quiero prohibir al usuario que inicie sesión, que no acceda a cierto controlador. –

11

Añadir una columna a el modelo User: allowed_to_log_in.

A continuación, añadir 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 puede añadir esta así:

def inactive_message 
    "You are not allowed to log in." 
end 

Creo que es muy importante porque el mensaje estándar de Devise dice:

"Su cuenta no está activada todavía."

que es confusa para los usuarios y la verdadera razón es que se ha "prohibido" de ellos de la tala en

+0

Estoy implementando una función de suspensión de usuario que funciona sin embargo el mensaje inactive "Su cuenta está actualmente suspendida" se muestra para los registros de usuario también. ¿Puedo tener diferentes mensajes inactivos para la activación de la nueva cuenta y la suspensión del usuario? – Dercni

+0

http://kiprosh.com/blog/customizing-devise-authentication-to-disable-or-enable-user-authentication – Dercni

Cuestiones relacionadas