django - 如何让 Django REST 身份验证工作?

标签 django api authentication django-rest-framework

我无法理解如何使身份验证工作。我已经设置了一个基本的 api,并且我正在尝试让任何类型的身份验证工作(从基本身份验证开始)。但无论我做什么,我都可以在不输入用户名或密码的情况下从数据库中检索信息(使用 Postman)。我做错了什么?

这是我的类(class):

class User(models.Model):
    birthdate = models.DateField()
    gender = models.CharField(
        max_length=1,
        choices=(('M', 'Male'), ('F', 'Female'), ('O', 'Other'), ('U', 'Unspecified'))
    )
    join_date = models.DateField(auto_now_add=True)
    username = models.CharField(max_length=25, unique=True)
    password = models.CharField(max_length=25,)

这是我的看法:

def user_tester(request):
    permission_classes = (IsAuthenticated,)
    if request.method == 'GET':
        objs = User.objects.all()
        serializer = UserSerializer(objs, many=True)
        return JsonResponse(serializer.data, safe=False) 

相关设置如下:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

请指教我做错了什么。我对 Django 有一些经验,但对身份验证或权限一无所知。

最佳答案

而不是使用:permission_classes = (IsAuthenticated,), 您应该在定义“user_tester”方法之前尝试装饰器,例如:

from rest_framework.decorators import api_view, permission_classes

@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def user_tester(request):
    objs = User.objects.all()
    serializer = UserSerializer(objs, many=True)
    return JsonResponse(serializer.data, safe=False)    

关于django - 如何让 Django REST 身份验证工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088779/

相关文章:

node.js - 使用 Node.js 访问 NTLM Api

php - 我将如何使用 PHP 对 Linux 用户和密码进行身份验证?

Python Selenium 陈旧元素异常

django - celery 导入错误 : No module named tasks

python - Django - 获取每个查询结果的最新记录

ruby-on-rails - omn​​iauth facebook 不显示图片

python - Gunicorn 模块未发现错误

node.js - 从 API 获取 POST 数据(node js、react)

javascript - 为什么我的 addPoint() 在我的 highcharts 代码中没有被识别为函数?

c# - 使用 Visual Studio Team Services API 添加附件(原为 Visual Studio Online)