2016-04-07 2 views
0

Я учусь Django, я создавал Апи отдых для входа в систему и регистрации апи он работал, но все внезапном Вход апи не работаетОшибка аутентификации Джанго рамки отдыха

authenticate(username=username, password=password)

не всегда возвращается ни при регистрации api работает правильно. ниже код для входа в систему

@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") 

Это код для регистрации

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 

Код для userserializer

class UserSerializer(serializers.ModelSerializer): 

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

я всегда получаю ниже ответ

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

Хотя раньше это было подходящий. Любая помощь будет высоко ценится.

+0

Вы используете сериалайзер для регистрации, он не будет хэш пароля (будет сохранен в виде простого текста) и аутентификации будет хэш пароля, а затем проверить. – ofnowhere

+0

Итак, можете ли вы подтвердить, что ваша регистрация является проблемой? После регистрации вы можете найти нового пользователя на страницах администратора? – dkarchmer

ответ

0

Как уже упоминалось в комментариях, если вы просто установили пароль в пользовательском сериализаторе, ваш пароль будет сохранен в виде открытого текста, где Django ожидает хэш. Так что вам нужно сделать что-то вроде этого

 
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

Спасибо @Mad Wombat – CodingRat

Смежные вопросы