web-dev-qa-db-ja.com

is_authenticated()はTypeError TypeErrorを発生させます: 'bool'オブジェクトは呼び出し不可能です

ビューでis_authenticated()を使用しようとしましたが、エラー `TypeError: 'bool' object is not callableが発生しました。このエラーが発生する理由と修正方法を教えてください。

@auth.before_app_request
def before_request():
    if current_user.is_authenticated() \
            and not current_user.confirmed \
            and request.endpoint[:5] != 'auth.' \
            and request.endpoint != 'static':
        return redirect(url_for('auth.unconfirmed'))
13
Gaoyang

オブジェクトがメソッドまたは関数のように動作しようとすると、「オブジェクトは呼び出し不可能」エラーが発生します。

この場合:

current_user.is_authenticated()

current_user.is_authenticatedはメソッドとして動作しますが、メソッドとしては動作しません。

このように使用する必要があります:

current_user.is_authenticated

オブジェクトではなく、メソッドまたは関数の後に「()」を使用します。

場合によっては、クラスが__call__関数もオブジェクトを呼び出すことができ、それから呼び出し可能になります。

31

Flask-Login 0.3. (2015年9月10日リリース)変更から:

  • BREAKING:is_authenticatedis_active、およびis_anonymousユーザークラスのメンバーは、メソッドではなくプロパティになりました。それに応じて、アプリケーションはユーザークラスを更新する必要があります。

したがって、userクラスを変更し、それに応じてコーディングする必要があります。

9
Peter