django - 如何让 Django REST 身份验证正常工作?
问题描述
我无法理解如何使身份验证正常工作。我已经设置了一个基本的 api,我正在尝试让任何类型的身份验证工作(从基本身份验证开始)。但无论我做什么,我都可以从数据库中检索信息(使用 Postman),而无需输入用户名或密码。我究竟做错了什么?
这是我的课:
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)
推荐阅读
- ios - 你好。我写了一个程序,在模拟器上重新运行后,它现在将主屏幕显示为黑色
- bash - 如何使用 shell 脚本判断 postgres 数据库表是否存在
- spring - 如何将弹性 4j 重试添加到 spring boot 2 webclient 调用?
- rust - 如何解决“计算超特征时检测到循环”?
- python - C函数的返回类型总是一个整数,同时使用来自python的so文件调用它
- java - JAR 文件可在 Windows 上运行,但不能在 Linux 上运行
- reactjs - 使用 Jenkinsfile (Jenkins Pipeline) 从 Package.json 中提取版本和名称
- r - 如何在 Shiny 的多个仪表板页面上使用相同的模块
- azure - 使用 @CurrentInteration 时出现 Azure DevOps 查询错误
- amazon-web-services - AWS EC2 快照还原