Devise - Как запретить подписчикам некоторых пользователей?

Я использую Devise для аутентификации в своем приложении.

Как запретить определенным пользователям входить в систему - отключить пользователя?

Ответ 1

Сделайте это так:

Создайте столбец с именем 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? (Документация)

Ответ 2

Добавьте столбец в модель 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 говорит:

"Ваша учетная запись еще не активирована."

Это запутанно для пользователей, и настоящая причина заключается в том, что вы "запретили" их при входе в систему.

Ответ 3

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

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