web-dev-qa-db-fra.com

is_authenticated () déclenche TypeError TypeError: l'objet 'bool' n'est pas appelable

J'ai essayé d'utiliser is_authenticated() dans une vue, mais j'ai eu l'erreur `TypeError: l'objet 'bool' n'est pas appelable. Pourquoi est-ce que j'obtiens cette erreur et comment la corriger?

@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

L'erreur "objet n'est pas appelable" se produit lorsque vous essayez de se comporter comme s'il s'agissait d'une méthode ou d'une fonction.

dans ce cas:

current_user.is_authenticated()

vous vous comportez current_user.is_authenticated comme une méthode mais ce n'est pas une méthode.

vous devez l'utiliser de cette façon:

current_user.is_authenticated

vous utilisez "()" après des méthodes ou des fonctions, pas des objets.

Dans certains cas, une classe peut implémenter __call__ fonction que vous pouvez également appeler un objet, il sera alors appelable.

31
Sepehr Hamzelooy

De Flask-Login 0.3. (publié le 10 septembre 2015) change:

  • RUPTURE: Le is_authenticated, is_active, et is_anonymous les membres de la classe d'utilisateurs sont désormais des propriétés et non des méthodes. Les applications doivent mettre à jour leurs classes d'utilisateurs en conséquence.

Vous devez donc modifier votre classe et votre code user en conséquence.

9
Peter