Розробка - Як заборонити певним користувачам входити в систему?


105

Я використовую Devise для аутентифікації у своїй програмі.

Як заборонити певним користувачам входити - відключити користувача?


42
Це дійсне питання, і його слід знову відкрити - ОП запитує "Як заборонити певним користувачам входити в систему", використовуючи пристрій .
Забба

Відповіді:


149

Зробіть так:

Створити стовпець is_activeдля Userмоделі.

Потім додайте код нижче до 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

ОНОВЛЕННЯ

Як зазначає Метт Хаггінс, метод тепер називається active_for_authentication?( Документація )


21
Схоже, це було перейменовано на, active_for_authentication?а не просто active?.
Метт Хаггінс

1
the method is now called active_for_authentication?означає, що назва вашого методу має бути active_for_authentication?замість active?.
fotanus


Важлива примітка: active_for_authentication?має бути публічним методом!
Младен Ябланович

super and self.is_active?можна спростити доsuper && is_active?
Давид

17

Додати стовпець в Userмоделі: allowed_to_log_in.

Потім додайте це до /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

Якщо ви хочете повідомити користувача за допомогою спеціального повідомлення, можете також додати це:

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

Я думаю, що це досить важливо, оскільки стандартне повідомлення від Devise говорить:

"Ваш обліковий запис ще не активовано."

Це незрозуміло для користувачів, і справжня причина полягає в тому, що ви "заборонили" їм входити в систему.


Я реалізую функцію призупинення роботи користувача, яка працює, однак неактивна_повідомлення "Ваш обліковий запис наразі призупинено" також відображається і зараз. Чи можу я мати різні неактивні повідомлення про активацію нового облікового запису та призупинення роботи користувача?
Dercni


Дякуємо за коментар неактивного_ повідомлення.
Кріс Фармер

0

Ви хочете зробити авторизацію, а не автентифікацію. Хоча придумайте лише аутентизацію.
Тобто пристрій лише вам повідомляє, що користувач - це той, хто каже, що він є.
Вам потрібно щось інше, щоб заборонити йому користуватися сайтом.

Авторизація є популярною темою, і тут є цілий список дорогоцінних каменів, які можуть вам допомогти:
http://ruby-toolbox.com/categories/rails_authorization.html
Беріть свій вибір.


6
Я знаю різницю. Вся справа в тому, що я хочу заборонити користувачеві входити, не отримуючи доступу до певного контролера.
Dimitar Vouldjeff

-2

Схоже, що вас може зацікавити канкан


1
Це не відповідь на поставлене запитання. Більшість людей знає різницю між авторизацією та автентифікацією. Питання полягало в тому, як це зробити так, щоб користувач не міг увійти в систему.
isaacsloan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.