2015-10-07 7 views
6

Ho provato a usare is_authenticated() in una vista, ma ho ricevuto l'errore `TypeError: 'bool' l'oggetto non è richiamabile. Perché ricevo questo errore e come lo risolvo?is_authenticated() solleva TypeError TypeError: l'oggetto 'bool' non è 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')) 
+0

rilasciare le parentesi – hsfzxjy

+0

Rimuovere '()'. –

+0

grazie per il tuo aiuto! – Gaoyang

risposta

6

L'errore "oggetto non è richiamabile" si verifica quando si tenta di comportarsi su un oggetto come se fosse un metodo o una funzione.

in questo caso:

current_user.is_authenticated() 

si sono behaveing ​​current_user.is_authenticated come metodo, ma il suo non è un metodo.

si deve utilizzare in questo modo:

current_user.is_authenticated 

si utilizza "()" dopo metodi o funzioni, non oggetti.

In alcuni casi una classe potrebbe implementare la funzione __call__ che è possibile chiamare anche un oggetto, quindi sarà richiamabile.

8

Da Flask-Login 0.3.0 (pubblicato il 10 settembre 2015): le modifiche

  • BREAKING: The is_authenticated , is_active , and is_anonymous members of the user class are now properties, not methods. Applications should update their user classes accordingly.

quindi è necessario cambiare la classe e il codice user conseguenza.