2016-07-12 15 views
0

meine Gewohnheit Anmeldungen apiUnabe zu bekommen Token von DRF get-Token api

from rest_framework import viewsets 
from rest_framework import serializers 

class SignupSerializer(serializers.Serializer): 
    email = serializers.EmailField(required=True) 
    password = serializers.CharField(required=True, write_only=True) 

    def validate_email(self, val): 
     try: 
      User.objects.get(username=val) 
      raise serializers.ValidationError("Email-ID already Exist") 
     except User.DoesNotExist: 
      return val 

class SignupView(viewsets.ModelViewSet): 

    serializer_class = SignupSerializer 

    def create(self, request, *args, **kwargs): 
     serializer = self.get_serializer(data=request.data) 
     serializer.is_valid(raise_exception=True) 
     data = serializer.data 

     email = data.get('email') 
     password = data.get('password') 

     u = User(email=email, username=email) 
     u.set_password(password) 
     u.save() 

     data = { 
      'message': 'Successfully Created!', 
      'data': {'id': u.id, 'email': email}, 
     } 
     return Response(data) 

Toekn erhalten api

from rest_framework.authtoken import views 
urlpatterns = [ 
    url(r'^api-token-auth/', views.obtain_auth_token), 
] 

wenn ich signup api getroffen, den Erfolg Antwort zurückgibt, Ich meine

{ 'message': 'erfolgreich erstellt!', 'data': { 'id': 1, 'E-Mail': '[email protected]'}}

aber wenn ich versuche,/zu generieren bekommen Token für diesen Benutzer mit über Token API, es sagt ..invalid Anmeldeinformationen?

{ 
    "non_field_errors": [ 
    "Unable to log in with provided credentials." 
    ] 
} 

aber wenn ich einen Benutzer mit Verwaltungsbefehl createsuperuser und verwenden gleiche api erstellen, es zu bekommen Token funktioniert?

gibt es etwas falsch in Signup API?

+0

Weisen Sie dem Benutzer ein Token _Token.objects.create (user = ...) _ zu? Können Sie überprüfen, ob Ihrem Benutzer ein Token in der Datenbank zugeordnet ist oder nicht? Wenn nicht, dann müssen Sie, wenn Sie TokenAuthentication verwenden möchten. – kapilsdv

Antwort

1

Sie write_only=True von Ihrem Serializer entfernen sollte. das würde den Fehler beheben.

0

Die Fehlermeldung zeigt Ihnen an, dass Ihre Anfrage die Ansicht nicht erreichen kann. Dies geschieht, weil eines der Middlewares einen Fehler auslöst.

Die einfachste (aber nicht sehr sichere) Lösung wäre, das API-Token bei erfolgreicher Anmeldung zurückzugeben oder eine andere Ansicht mit einer Anmeldung (die ein Token zurückgibt) hinzuzufügen.

Für eine definitive Antwort müssen Sie weitere Informationen wie die Konfiguration für Ihre Authentifizierungs-Backends bereitstellen.

Sie können hier weitere Informationen zu Authentifizierung in DRF finden http://www.django-rest-framework.org/api-guide/authentication/#how-authentication-is-determined