Devise - Come faccio a vietare l'accesso a determinati utenti?


105

Sto usando Devise per l'autenticazione nella mia applicazione.

Come faccio a vietare l'accesso a determinati utenti, in qualche modo disabilitare un utente?


42
Questa è una domanda valida e dovrebbe essere riaperta - OP sta chiedendo "Come faccio a vietare l'accesso a determinati utenti" usando devise .
Zabba

Risposte:


149

Fai cosi:

Crea una colonna chiamata is_activeper il Usermodello.

Quindi aggiungi il codice seguente al Usermodello:

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

AGGIORNARE

Come osserva Matt Huggins, il metodo è ora chiamato active_for_authentication?( Documentazione )


21
Sembra che questo sia stato rinominato active_for_authentication?anziché solo active?.
Matt Huggins

1
the method is now called active_for_authentication?significa che il nome del tuo metodo dovrebbe essere active_for_authentication?invece di active?.
fotanus


Nota importante: active_for_authentication?deve essere un metodo pubblico!
Mladen Jablanović

super and self.is_active?può essere semplificato insuper && is_active?
David

17

Aggiungere una colonna al Usermodello allowed_to_log_in.

Quindi aggiungi questo a /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

Se vuoi informare l'utente con un messaggio personalizzato puoi aggiungere anche questo:

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

Penso che sia abbastanza importante perché il messaggio standard di Devise dice:

"Il tuo account non è ancora attivato."

Questo crea confusione per gli utenti e il vero motivo è che li hai "banditi" dall'accesso.


Sto implementando una funzione di sospensione degli utenti che funziona, tuttavia il messaggio inactive_message "Il tuo account è attualmente sospeso" viene visualizzato anche per le registrazioni degli utenti. Posso avere diversi messaggi inattivi per l'attivazione di un nuovo account e la sospensione dell'utente?
Dercni


Grazie per il commento inactive_message.
Chris Farmer

0

Vuoi eseguire l'autorizzazione, non l'autenticazione. Devise fa solo l'autenticazione, però.
Cioè devise ti dice solo che un utente è chi dice di essere.
Hai bisogno di qualcos'altro per impedirgli di utilizzare il sito.

L'autorizzazione è un argomento popolare e c'è un intero elenco di gemme che possono aiutarti con esso:
http://ruby-toolbox.com/categories/rails_authorization.html
Fai la tua scelta.


6
Conosco la differenza. Il fatto è che voglio vietare all'utente di registrarsi, non di accedere a determinati controller.
Dimitar Vouldjeff

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.