2015-09-23 21 views
7

を上書きしようとしたときに「ブール」オブジェクトは、呼び出すことはできません私は、ユーザーが常にアクティブにならないように、フラスコ、ログインにis_activeを変更したいです。フラスコ-ログインはTypeError例外を発生させます:is_activeプロパティ

デフォルトは常にTrueを返しますが、私はbanned列の値を返すように変更しました。ドキュメントに基づいて

is_activeは、プロパティでなければなりません。しかし、内部のフラスコ・ログインコードが発生します

TypeError: 'bool' object is not callable 

is_activeを使用しようとします。

どのように私は正しく一部のユーザーを無効にするis_activeを使用していますか?

class User(UserMixin, db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    banned = db.Column(db.Boolean, default=False) 

    @property 
    def is_active(self): 
     return self.banned 

login_user(user, form.remember_me.data) 

if not force and not user.is_active(): 
TypeError: 'bool' object is not callable 
+0

@davidism、今、更新後、私はより良い問題を抱えています。https://github.com/miguelgrinberg/flasky/issues/1#issuecomment-142647023 lol – anvd

+0

私はあなたが何を意味するか分かりません。アプリがFlask-Login <0.3を予期している場合、Flask-Login <0.3をインストールし、アプリが更新されるまで適切に使用します。私の答えはあなたの直接の質問に答えましたか? – davidism

+0

強力なセッション保護に関するバグはすでにFlask-Loginに報告されています。 is_activeへの変更には関係しません。しかし、 "それが固定されるまで待つ"以外の "Flask-Loginにはバグがあります"という回答はありません。 – davidism

答えて

20

is_active,is_anonymousおよびis_authenticatedは、Flask-Login 0.3のすべての特性である。それらを使用したい場合は属性として扱い、呼び出さないでください。あなたがそれらを無効にしたい場合は、それらを@propertyで飾ることを忘れないでください。

# change from 
current_user.is_authenticated() 
# to 
current_user.is_authenticated 

最新のバージョン(0.3)のドキュメントを読んでいますが、古いバージョンのライブラリを使用しているようです。バージョン0.3 contains a breaking changeは、これらの属性をメソッドからプロパティに変更しました。 Flask-Loginの最新バージョンにアップグレードし、それらをプロパティとして扱う必要があります。

あなたはFalseを返すためにそのis_activeプロパティを引き起こすことによって、ユーザーを無効にします。列の値を返すというアイディアは問題ありません。

0

独自のロジックを実装するis_activeをオーバーロード。

それで何が悪いのでしょうか? IMOはありません。 @propertyデコレータを使用してプロパティを作成するのを忘れた以外は正しいです。

たとえば、current_userと似ています。

+0

okですが、私はdef is_banned(self)を使うことができます。基本的にこれはflask_loginから完全に独立したプロパティです。 – anvd

+0

はい、ただし、is_activeはその場合常にtrueになります。それはあなたの決定次第です –

関連する問題