0

인증을 위해 JWT 토큰을 사용하는 사용자의 first_name 필드를 업데이트하려고합니다. 사용자 이름과 암호 필드가없는 다른 테이블에서 작업 할 때 어떤 이유로 쉽게 그것을하고 JWT 토큰을 사용하여 세부 정보를 업데이 트하십시오. 하지만 장고 사용자 모델 기본 테이블에서 할 때 요청에 사용자 이름과 암호를 포함하도록 요청합니다. 심지어 업데이트하지 않을 수도 있습니다. 여기에 내가 인증 헤더를 잘 설정해야하고 다른 요구와 함께 작동하더라도 우편 배달부에게PUT 요청이있는 Django JWT 인증

{ 
    "username": [ 
     "This field is required." 
    ], 
    "password": [ 
     "This field is required." 
    ] 
} 

를 사용하여 요청을 보낼 때 나는 점점 오전 오류가 있지만, 사용자 정보를 업데이트 할 때, 나는 포함하지 필요한 모든을 및 기본 인증 클래스. 어떤 도움을 주셔서 감사 드리며,이 작은 일을 4 일 동안 해결하려고 노력하고 있습니다.

컬 명령은

curl -H "Authorization: JWT <token>" -X GET http://localhost:8000/user/3/ 

주의 사항 다른 방법을 작업

curl -H "Authorization: JWT <token>" -X PUT http://localhost:8000/user/3/ -d '{"first_name":"curl_test"}' 

컬 명령을 작동하지 않습니다. 내 views.py (된 UserDetails 클래스) 내가 서명이 만료 무엇입니까 요청에는 오래 된 토큰을 보낼 때 JWT가 완전히 작동하고

REST_FRAMEWORK = { 

    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
     'rest_framework.authentication.BasicAuthentication', 
     'rest_framework.authentication.SessionAuthentication', 

    ), 
    'DEFAULT_PARSER_CLASSES': (
     'rest_framework.parsers.FormParser', 
     'rest_framework.parsers.MultiPartParser', 
     'rest_framework.parsers.JSONParser', 

    ) 
} 

class UserDetail(APIView): 
    permission_classes = (IsOwner, IsAuthenticated) 
    """ 
    Retrieve, update or delete a user instance. 
    """ 

    def get_object(self, pk): 
     try: 
      return User.objects.get(pk=pk) 
     except User.DoesNotExist: 
      raise Http404 


    def get(self, request, pk, format=None): 
     user = self.get_object(pk) 
     serializer = UserSerializer(user) 
     return Response(serializer.data) 

    def put(self, request, pk, format=None): 
     user = self.get_object(pk) 
     serializer = UserSerializer(user, data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      user = Profile.objects.get(id=pk) 
      user.profile.updated = timezone.now() 
      user.save() 
      return Response(serializer.data, status=status.HTTP_200_OK) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

    def delete(self, request, pk, format=None): 
     user = self.get_object(pk) 
     user.delete() 
     return Response(status=status.HTTP_204_NO_CONTENT) 

내 settings.py하지만 때 내가 넣어 사용자 이름/비밀번호를받는 최신 토큰은 필수 필드입니다.

+0

시도는'사용 patch' 방법 –

+0

같은 오류 할 수 있습니다. JWT는 내가 사용자 이름과 암호를 포함하고 헤더에 토큰을 무시해야한다고 말했습니다. – Abdul

+0

서버에 보내는 데이터의 json을 추가하십시오. –

답변

1

사용자 시리얼 모든 필드 데이터가 적용되어, partial updates 수 있도록 partial=True를 사용

serializer = UserSerializer(user, data={'username': u'test'}, partial=True) 
+0

일단 내 노트북을 업데이트하면 시도해 보겠다. – Abdul

+0

방금 ​​시도했는데 부분 업데이트가 아니거나 완전히 문제가있다. 사용자 이름/암호 필드가없고 다른 PQ 요청을 사용하는 다른 테이블의 정확한 코드는 JWT에서 유효합니다. 토큰 헤더가 포함되어 있어도 사용자 이름과 암호를 원한다면 rest-framework-jwt를 사용하는 것 같습니다. 토큰 얻기/확인/새로 고침이 문제없이 작동합니다. – Abdul

+0

반환 된 오류가 'UserSerializer'가 아니라 JWT에서 온 것임을 어떻게 알 수 있습니까? 스택 트레이스? – vignesh