デバイス-特定のユーザーがサインインすることをどのように禁止しますか?


105

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

特定のユーザーがサインインするのをどのように禁止しますか-ユーザーを無効にするようなものですか?


42
これは有効な質問で、再び開かれるべき- OPを使用して、「私は署名から特定のユーザーを禁止するにはどうすればよい」求めている工夫を
Zabba

回答:


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

更新

Matt Hugginsが指摘しているように、このメソッドは現在呼び出されていますactive_for_authentication?Documentation


21
これはのactive_for_authentication?代わりにに名前が変更されたようですactive?
Matt Huggins

1
the method is now called active_for_authentication?メソッド名はではactive_for_authentication?なくにする必要があることを意味しますactive?
fotanus 14


重要な注意:active_for_authentication?パブリックメソッドでなければなりません!
MladenJablanović2016

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

「あなたのアカウントはまだアクティブ化されていません。」

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


ユーザーの一時停止機能を実装していますが、機能しますが、今のところ、ユーザーのサインアップに対して「アカウントは現在停止されています」というinactive_messageが表示されます。新しいアカウントのアクティブ化とユーザーの一時停止に対して異なる非アクティブメッセージを表示できますか?
Dercni 2017


inactive_messageコメントをお寄せいただきありがとうございます。
Chris Farmer、

0

認証ではなく認可を行いたい。Deviseは、しかし、ただの美化をします。
すなわちdeviseは、ユーザーが彼の言うとおりの人物であることを伝えます。
彼がサイトを使用することを禁止するために何か他のものが必要です。

承認は人気のあるトピックであり、それを支援することができる宝石の完全なリストがあり ます:
http : //ruby-toolbox.com/categories/rails_authorization.html
選択してください。


6
私は違いを知っています。問題は、ユーザーが特定のコントローラーにアクセスするのではなく、サインインすることを禁止することです。
Dimitar Vouldjeff

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.