programing

Django Rest Framework 토큰에서 인증된 사용자 가져오기

stoneblock 2023. 3. 20. 21:24

Django Rest Framework 토큰에서 인증된 사용자 가져오기

저는 Django에 처음 와서 DRF를 사용하여 작은 API를 구축했습니다.angular.js 클라이언트가 사용자 인증 세부사항을 게시하고 DRF는 다음과 같은 토큰을 반환합니다.

{ 'token' : '9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b' }

튜토리얼에 근거해, 상세한 것에 대하여는,request.user근데 어디서 해야 할지 모르겠어요.좋은 예가 되지 않아서 헷갈리네요.어떻게 돌아가는지 생각나는 사람?의견을 주셔서 대단히 감사합니다.

아래는 제 뷰와 시리얼라이저의 코드입니다.

from serializers import ExampleSerializer
from models import Example
from rest_framework import viewsets

class ExampleViewSet(viewsets.ModelViewSet):
    """
    Example api description
    """
    queryset = Example.objects.all()
    serializer_class = ExampleSerializer    

시리얼라이저

 from models import Example
 from rest_framework import serializers

 class ExampleSerializer(serializers.ModelSerializer):
      class Meta:
        model = Example
        fields = ('id', 'field_one', 'field_two', 'created_at', 'updated_at')
        depth = 1

저도 Angular와 DRF가 처음이라는 걸 명심하고...

이미 토큰을 수신하고 있는 경우 angularjs 측에서 후속 요청 헤더에 토큰을 포함해야 합니다.인증요구의 다음과 같은 생략형 코드입니다.

$http({auth request code here}).then(function(response){
  var token = response.headers().token
  $http.defaults.headers.common['Authorization'] = 'Token ' + token;
});

표시 내용원하는 대로 설정

authentication_classes = (TokenAuthentication,)

관련된 모든 permission_private와 함께 지정합니다.

Angular http 요청에 토큰을 포함할 경우 request.user를 사용하여 사용자를 참조할 수 있습니다.

def list(self, request):
    queryset = SomeObject.objects.filter(owner=request.user)

또는 다른 용도가 있습니다(사용자 모델은 django.contrib).auth.discloss.사용자):

class UserView(RetrieveAPIView):
    model = User
    serializer_class = UserSerializer

    def retrieve(self, request, pk=None):
        """
        If provided 'pk' is "me" then return the current user.
        """
        if request.user and pk == 'me':
            return Response(UserSerializer(request.user).data)
        return super(UserView, self).retrieve(request, pk)

제 경우 API REST Client를 사용하여 API를 테스트하려고 합니다.설정에 헤더를 넣으면 동작합니다.

Authorization: Token <<token>>

언급URL : https://stackoverflow.com/questions/23235544/get-authenticated-user-from-token-in-django-rest-framework