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'))
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.
De Flask-Login 0.3. (publié le 10 septembre 2015) change:
- RUPTURE: Le
is_authenticated
,is_active
, etis_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.