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
'programing' 카테고리의 다른 글
create-react-app을 사용하는 React 앱에서 ES6 기능을 폴리필하는 가장 좋은 방법 (0) | 2023.03.20 |
---|---|
JSON - XML CDATA와 동등한 것이 있습니까? (0) | 2023.03.20 |
경고: 각도 로드를 두 번 이상 시도했습니다.각도 JS (0) | 2023.03.20 |
MongoDB 집약:총 레코드 수를 어떻게 얻습니까? (0) | 2023.03.20 |
AngularJs를 통해 브라우저가 캐시를 강제로 클리어합니다. (0) | 2023.03.20 |