在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;
});

在你的ViewSet中你可能会想要

authentication_classes = (TokenAuthentication,)

以及任何permission_classes是相关的。

如果您在角HTTP请求中包含令牌,那么我相信您可以像使用request.user一样引用用户

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

或者,这是另一个用途(用户模型是django.contrib.auth.models.User):

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)
链接地址: http://www.djcxy.com/p/33769.html

上一篇: Get Authenticated user from token in Django Rest Framework

下一篇: Trying to connect Django dev server from remote