Opracowanie - jak zabronić niektórym użytkownikom logowania się?


105

Używam Devise do uwierzytelniania w mojej aplikacji.

Jak zabronić niektórym użytkownikom logowania się - rodzaj wyłączenia użytkownika?


42
Jest to ważna kwestia i powinny zostać wznowione - PO pyta: „Jak mogę zabronić niektórym użytkownikom logowanie się” za pomocą devise .
Zabba

Odpowiedzi:


149

Zrób to tak:

Utwórz kolumnę o nazwie is_activedla Usermodelu.

Następnie dodaj poniższy kod do Usermodelu:

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

AKTUALIZACJA

Jak zauważa Matt Huggins, metoda nazywa się teraz active_for_authentication?( Dokumentacja )


21
Wygląda na to, że ta nazwa została zmieniona na active_for_authentication?zamiast tylko active?.
Matt Huggins

1
the method is now called active_for_authentication?oznacza, że ​​nazwa metody powinna być active_for_authentication?zamiast active?.
fotanus,


Ważna uwaga: active_for_authentication?musi być metodą publiczną!
Mladen Jablanović

super and self.is_active?można uprościć dosuper && is_active?
David

17

Dodaj kolumnę do Usermodelu:allowed_to_log_in .

Następnie dodaj to do /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

Jeśli chcesz poinformować użytkownika niestandardową wiadomością, możesz również dodać to:

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

Myślę, że jest to dość ważne, ponieważ standardowa wiadomość od Devise mówi:

"Twoje konto nie zostało jeszcze aktywowane."

Jest to mylące dla użytkowników, a prawdziwym powodem jest to, że „zablokowałeś” im logowanie.


Wdrażam funkcję zawieszania użytkowników, która działa, jednak komunikat inactive_message "Twoje konto jest obecnie zawieszone" jest wyświetlany również w przypadku rejestracji użytkowników. Czy mogę otrzymać różne nieaktywne wiadomości dotyczące aktywacji nowego konta i zawieszenia użytkownika?
Dercni


Dzięki za komentarz inactive_message.
Chris Farmer

0

Chcesz przeprowadzić autoryzację, a nie uwierzytelnianie. Jednak tylko Devise dokonuje uwierzytelnienia.
To znaczy wymyślenie mówi tylko, że użytkownik jest tym, za kogo się podaje.
Potrzebujesz czegoś innego, aby zabronić mu korzystania z witryny.

Autoryzacja to popularny temat i jest cała lista perełek, które mogą Ci w tym pomóc:
http://ruby-toolbox.com/categories/rails_authorization.html
Wybieraj.


6
Znam różnicę. Chodzi o to, że chcę zabronić użytkownikowi logowania się, nie uzyskując dostępu do określonego kontrolera.
Dimitar Vouldjeff

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.