无法使用django rest框架进行身份验证(request.user = AnonymousUser)

时间:2016-03-29 13:08:23

标签: python django rest django-rest-framework

我正在尝试为传入请求配置身份验证,但我无法理解实现它所需的步骤。

我已按照documentation

中提供的步骤操作

首先,我编辑了setting.py以获取身份验证设置:

INSTALLED_APPS = [
    ...,
    'rest_framework',
    'rest_framework.authtoken',
    ...,
]

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework.authentication.BasicAuthentication',
            'rest_framework.authentication.TokenAuthentication',
        )
    }

view.py

@csrf_exempt
def uuid_details(request, uuid):

    if request.method == 'GET':
        print "user: " + str(request.user)  #  user: AnonymousUser

因此,当我调用上面的rest API时,在上面一行中我输出为AnonymousUser。根据我的理解,我应该收到经过身份验证的User对象。

我能够检索令牌并将其传递给其余的API。

>>> Token.objects.get(user=user)
<Token: 95119884347cf000caab9d2596b9a18a9103f1db>

所以,我无法理解Django rest框架中的身份验证是如何工作的。

2 个答案:

答案 0 :(得分:1)

看起来你有一个常规的Django视图,所以其余的框架认证代码都不会运行。

def uuid_details(request, uuid):

您可以使用api_view装饰器将其转换为休息框架视图。

from rest_framework.response import Response
from rest_framework.decorators import api_view

@api_view(['GET'])
def uuid_details(request, uuid):
    return Response({"message": "user: " + str(request.user)}

答案 1 :(得分:0)

两件事:

  1. @csrf_exempt不适用于DRF视图。它是原始Django的。
  2. 您没有使用DRF decorator for function views
  3. 一旦修复了这两点,就应该有效。