Der beste Ansatz ist es in Devise Weise zu tun:. übernimmt
Darunter Sie database_authenticable Modul und Ihre Anwendung Benutzer Modellnamen Benutzer Entwickeln verwenden
1. Implementieren Sie eine account_active? Methode.
Fügen Sie die boolesche Spalte account_active
in der Benutzertabelle hinzu oder definieren Sie die Methode account_active?
im Benutzermodell (Sie können Ihren eigenen Methodennamen wählen). Zum Beispiel:
# app/models/user.rb
def account_active?
blocked_at.nil?
end
2. Überschreiben Sie die active_for_authentication?
Methode in Ihrem Modell (Benutzer).
# app/models/user.rb
def active_for_authentication?
super && account_active?
end
3. Add-Methode, die Übersetzung für Flash-Mitteilung zurückgibt.
Wenn active_for_authentication?
false zurückgibt, fragt Devise den Grund, warum Ihr Modell inaktiv ist, mit der Methode inactive_message
.
# app/models/user.rb
def inactive_message
account_active? ? super : :locked
end
Und das ist es. Sie müssen sich nicht um sign_out
oder redirect_to
Benutzer kümmern.
Außerdem wird Benutzer sofort gesperrt, mit dem nächsten Anforderung, nicht nach dem nächsten Zeichen in
Mehr:. devise/authenticatable.rb.
Beachten Sie, dass dies eine Schwäche hat: Wenn ein Benutzer gesperrt wird, während er bereits angemeldet ist, wird das Verbot erst wirksam, wenn sie sich abmelden und erneut anmelden (was sehr lange dauern kann) der Benutzer sich zu dem Zeitpunkt abzumelden, zu dem Sie ihn verbieten, oder diese Logik in eine 'before_action' in Ihren Controllern verschieben, anstatt' after_sign_in_path_for' zu verwenden. – GMA
Wenn Sie den Benutzer verbieten, fügen Sie einfach eine weitere Zeile hinzu, um ihn abzumelden. – enter08