2016-04-07 16 views
0

ich Django lerne, ich Rest Api für die Anmeldung und Registrierung api wurde die Erstellung war es funktioniert, aber alle plötzlich Anmeldung api funktioniert nichtAuthentifizierung fehlgeschlagen django Rest Rahmen

authenticate(username=username, password=password)

immer keine Rückkehr während Anmeldung api funktioniert einwandfrei. unten ist der Code für die Anmeldung

@api_view(['POST']) 
def login(requset): 
    """ 
    This api for user login 
    --- 
    parameters: 
    - name: username 
     description: username for login 
     required: true 
     type: string 
     paramType: form 
    - name: password 
     required: true 
     type: string 
     paramType: form 
    consumes: 
     - application/json 
     - application/xml 
    produces: 
     - application/json 
     - application/xml 
    """ 
    username = requset.data.get('username') 
    print(username) 
    password = requset.data.get('password') 
    print(password) 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     response_data = {} 
     response_data['result'] = 'success' 
     response_data['message'] = 'Login successful' 
     # response_data['auth_token'] = auth_token 

     return HttpResponse(json.dumps(response_data), 
          content_type="application/json") 
    else: 
     response_data = {} 
     response_data['result'] = 'error' 
     response_data['message'] = 'Login Unsuccessful' 
     return HttpResponse(json.dumps(response_data), 
            content_type="application/json") 

Dies ist Code für die Registrierung

class Register(generics.CreateAPIView): 
    """ 
    Your docs 
    --- 
    type: 
     username: 
     required: true 
     type: string 
     password: 
     required: true 
     type: url 
     email: 
     required: true 
     type: string 

    serializer: .serializers.UserSerializer 
    omit_serializer: false 

    parameters_strategy: merge 
    omit_parameters: 
     - path 
    parameters: 
     - name: username 
      description: Username for registration purpose 
      required: true 
      type: string 
      paramType: form 
     - name: password 
      description: * password for registration purpose 
      required: true 
      type: string 
      paramType: form 
     - name: email 
      description: * email for registration purpose 
      required: true 
      type: string 
      paramType: form 

    responseMessages: 
     - code: 401 
      message: Not authenticated 

    consumes: 
     - application/json 
     - application/xml 
    produces: 
     - application/json 
     - application/xml 
    """ 

    #first define query set 
    queryset = User.objects.all() 
    #define model 
    model = User 
    #define serializer 
    serializer_class = UserSerializer 

-Code für userserializer

class UserSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = User 
     fields = ('id','username','email','password','is_active') 

i unten Antwort erhalten immer

{ 
    "message": "Login Unsuccessful", 
    "result": "error" 
} 

Während früher war es richtig kommen. Jede Hilfe wird sehr geschätzt.

+0

Sie verwenden Serializer tun, um zu registrieren, wird es nicht die Passwort-Hash (wird als Klartext gespeichert) und authentifizieren wird die Passwort-Hash und dann überprüfen. – ofnowhere

+0

Können Sie also bestätigen, dass Ihre Registrierung das Problem ist? Können Sie nach einer Registrierung den neuen Nutzer auf den Admin-Seiten finden? – dkarchmer

Antwort

0

Wie in den Kommentaren erwähnt, wenn Sie nur ein Passwort in einem Benutzer-Serializer setzen, wird Ihr Passwort im Klartext gespeichert, wo Django einen Hash erwartet. Sie müssen also so etwas wie dieses

 
class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('id','username','email','password','is_active') 

    def create(self, validated_data): 
     user = super().create(validated_data) 
     if 'password' in validated_data: 
      user.set_password(validated_data['password']) 
      user.save() 
     return user 
+0

Danke @Mad Wombat – CodingRat

Verwandte Themen