Gerät - Wie verbiete ich bestimmten Benutzern die Anmeldung?

105

Ich verwende Devise zur Authentifizierung in meiner Anwendung.

Wie verbiete ich bestimmten Benutzern, sich anzumelden, um einen Benutzer zu deaktivieren?

Dimitar Vouldjeff
quelle
42
Dies ist eine gültige Frage und sollte erneut geöffnet werden. OP fragt mit dem Gerät "Wie verbiete ich bestimmten Benutzern, sich anzumelden?" .
Zabba

Antworten:

149

Mach es so:

Erstellen Sie eine Spalte is_activefür das UserModell.

Fügen Sie dann den folgenden Code zum UserModell hinzu:

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

AKTUALISIEREN

Wie Matt Huggins bemerkt, heißt die Methode jetzt active_for_authentication?( Dokumentation )

Zabba
quelle
21
Sieht so aus, als ob dies in active_for_authentication?statt nur umbenannt wurde active?.
Matt Huggins
1
the method is now called active_for_authentication?bedeutet, dass Ihr Methodenname active_for_authentication?anstelle von sein sollte active?.
Fotanus
5
Devise Wiki - So
passen Sie die Statusüberprüfung des
Wichtiger Hinweis: active_for_authentication?muss eine öffentliche Methode sein!
Mladen Jablanović
super and self.is_active?kann vereinfacht werdensuper && is_active?
David
17

Fügen Sie dem UserModell eine Spalte hinzu : allowed_to_log_in.

Dann füge dies hinzu zu /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

Wenn Sie den Benutzer mit einer benutzerdefinierten Nachricht informieren möchten, können Sie diese auch hinzufügen:

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

Ich denke, das ist ziemlich wichtig, weil die Standardnachricht von Devise sagt:

"Dein Benutzerkonto ist noch nicht aktiviert."

Das ist für Benutzer verwirrend und der wahre Grund ist, dass Sie ihnen das Anmelden "verboten" haben.

Oyvkva
quelle
Ich implementiere eine Benutzersperrfunktion, die funktioniert. Die inaktive_Meldung "Ihr Konto ist derzeit gesperrt" wird jedoch auch für Benutzeranmeldungen angezeigt. Kann ich verschiedene inaktive Nachrichten für die Aktivierung eines neuen Kontos und die Sperrung von Benutzern haben?
Dercni
Danke für den inactive_message Kommentar.
Chris Farmer
0

Sie möchten eine Autorisierung durchführen, keine Authentifizierung. Devise führt jedoch nur eine Authentifizierung durch.
Das heißt, das Gerät sagt Ihnen nur, dass ein Benutzer der ist, von dem er sagt, dass er er ist.
Sie brauchen etwas anderes, um ihm die Nutzung der Website zu verbieten.

Autorisierung ist ein beliebtes Thema und es gibt eine ganze Liste von Edelsteinen, die Ihnen dabei helfen können:
http://ruby-toolbox.com/categories/rails_authorization.html Treffen
Sie Ihre Wahl.

x10
quelle
6
Ich kenne den Unterschied. Die Sache ist, dass ich dem Benutzer verbieten möchte, sich anzumelden und nicht auf einen bestimmten Controller zuzugreifen.
Dimitar Vouldjeff