アプリケーションの認証にDeviseを使用しています。
特定のユーザーのサインインを禁止するにはどうすればよいですか?ユーザーを無効にしますか?
次のようにします:
User
モデルのis_active
という列を作成します。
次に、以下のコードを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
[〜#〜] update [〜#〜]
Matt Hugginsが指摘しているように、メソッドはactive_for_authentication?
と呼ばれるようになりました( Documentation )
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からの標準メッセージには次のように書かれているため、これは非常に重要だと思います。
「アカウントはまだ有効化されていません。」
これはユーザーを混乱させます。本当の理由は、ユーザーがログインを「禁止」したことです。
認証ではなく承認を行います。ただし、Deviseは認証のみを行います。
つまりdeviseは、ユーザーが自分が言っているとおりのユーザーであることを伝えるだけです。
このサイトの使用を禁止するには、何か他のものが必要です。
承認は一般的なトピックであり、それを支援する宝石の全リストがあります。
http://Ruby-toolbox.com/categories/Rails_authorization.html
好きなのを選びな。