web-dev-qa-db-ja.com

工夫-特定のユーザーのサインインを禁止するにはどうすればよいですか?

アプリケーションの認証にDeviseを使用しています。

特定のユーザーのサインインを禁止するにはどうすればよいですか?ユーザーを無効にしますか?

101

次のようにします:

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

136
Zabba

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からの標準メッセージには次のように書かれているため、これは非常に重要だと思います。

「アカウントはまだ有効化されていません。」

これはユーザーを混乱させます。本当の理由は、ユーザーがログインを「禁止」したことです。

15
Oyvkva

認証ではなく承認を行います。ただし、Deviseは認証のみを行います。
つまりdeviseは、ユーザーが自分が言っているとおりのユーザーであることを伝えるだけです。
このサイトの使用を禁止するには、何か他のものが必要です。

承認は一般的なトピックであり、それを支援する宝石の全リストがあります。
http://Ruby-toolbox.com/categories/Rails_authorization.html
好きなのを選びな。

0
x10