2017-01-12 4 views
0

Ich habe diesen Code:Django Login Attribute: ‚AnonymousUser‘ Objekt hat kein Attribut ‚_meta‘

from django.contrib.auth import logout, login, authenticate 
... 
    if User.objects.filter(email=email).exists(): 
     existing_user = User.objects.get(email=email) 

     user = authenticate(username=existing_user.username, password=existing_user.password) 

     login(request, user) 

die Dokumentation nach, sollte diese Arbeit, aber es funktioniert nicht, es gibt mir die Fehlermeldung:

Vielleicht passiert das Problem, weil ich JWT-Authentifizierung mit Django Rest Framework verwende? Es ist nur eine API mit Djangos, also denke ich, es ist ein anderes Szenario, aber ich verstehe nicht, was das Problem verursachen könnte.

+4

Zeigen Sie die vollständige Traceback. Aber dein Code ** macht keinen Sinn **; 'authenticate' ist, was den Benutzer durch den Vergleich mit dem in der Datenbank gespeicherten * hashed * Passwort erhält. Es hat keinen Sinn, den Benutzer separat zu finden, und hier wird "authentifizieren" * immer * fehlschlagen. –

+0

Hallo @DanielRoseman. Wie kann ich den Benutzer in der Ansicht anmelden, ohne sein Passwort zur Hand zu haben? Die App schickt mir einen Facebook-Token, ich bestätige den Token mit Fb's API, dann erhalte ich die Email und überprüfe, ob diese schon existiert (der Rest ist im Code eingefügt), wenn der ein User mit dieser Email existiert, brauche ich um diesen Benutzer anzumelden. Ich dachte, dass die Verwendung von 'authenticate' und' login' es lösen würde, aber jetzt sehe ich es nicht. – alejoss

+2

Sie können Ihr eigenes Authentifizierungs-Backend implementieren, um Benutzer ohne Passwort zu authentifizieren. Es gibt ein Beispiel mit Token-Authentifizierung hier - https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#writing-an-authentication-backend. –

Antwort

1

In DRF sollte Benutzer innerhalb der Authentifizierungsklasse authentifiziert werden. This Bibliothek bietet eine für JWT Auth. Es bietet sowohl Token-Generierung als auch Verifizierung.

Sie erhalten Benutzer als self.request.user in Ihrer View oder ViewSet-Klasse. Sie müssen nur JWT Auth ermöglichen:

class ExampleView(APIView): 
    authentication_classes = (BasicAuthentication, JSONWebTokenAuthentication) 

Oder besser Set ist als DEFAULT_AUTHENTICATION_CLASSES wie dokumentiert here.

Verwandte Themen