Django 休息框架不验证自定义用户模型
Django rest framework not authenticating custom user model
我有这个自定义用户模型:
class CustomUser(AbstractBaseUser,PermissionsMixin):
email = models.CharField(max_length=255, unique=True)
....
并且此视图需要身份验证才能 运行:
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
def test_view(request):
return HttpResponse("Allowed")
当我为此启动 url 时,无论我是否在我的授权 header 中提供凭据,它总是 运行。我的猜测是 rest 框架正在使用 django 的默认用户模型,因为 request.user object 包含一个 AnonymousUser 实例。但是我检查了数据库,authtoken table 引用了我的自定义用户 table.
我认为这应该和我的代码一样简单,但我想我遗漏了什么。有什么想法吗?
编辑:这里有更多详细信息:
settings.py:
INSTALLED_APPS = (
'myapps',
...
'django.contrib.auth', #should this be enabled?
...
'rest_framework.authtoken'
)
...
#I think this is unnecesary since i use per-view decorators, but...
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
AUTH_USER_MODEL = 'users.CustomUser'
urls.py:
urlpatterns = patterns('',
...
url(r'^test', test_view, name='test'),
...
)
将以下内容添加到 settings.py
如果您使用的是 DRF 令牌 Auth:
INSTALLED_APPS = (
...
'rest_framework.authtoken'
)
如果您使用的是 JWT 身份验证:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
...
}
只需将 @api_view(['GET'])
装饰器添加到您的视图中,例如
from rest_framework.decorators import api_view
@api_view(['GET'])
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
def test_view(request):
return HttpResponse("Allowed")
我有这个自定义用户模型:
class CustomUser(AbstractBaseUser,PermissionsMixin):
email = models.CharField(max_length=255, unique=True)
....
并且此视图需要身份验证才能 运行:
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
def test_view(request):
return HttpResponse("Allowed")
当我为此启动 url 时,无论我是否在我的授权 header 中提供凭据,它总是 运行。我的猜测是 rest 框架正在使用 django 的默认用户模型,因为 request.user object 包含一个 AnonymousUser 实例。但是我检查了数据库,authtoken table 引用了我的自定义用户 table.
我认为这应该和我的代码一样简单,但我想我遗漏了什么。有什么想法吗?
编辑:这里有更多详细信息:
settings.py:
INSTALLED_APPS = (
'myapps',
...
'django.contrib.auth', #should this be enabled?
...
'rest_framework.authtoken'
)
...
#I think this is unnecesary since i use per-view decorators, but...
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
AUTH_USER_MODEL = 'users.CustomUser'
urls.py:
urlpatterns = patterns('',
...
url(r'^test', test_view, name='test'),
...
)
将以下内容添加到 settings.py
如果您使用的是 DRF 令牌 Auth:
INSTALLED_APPS = (
...
'rest_framework.authtoken'
)
如果您使用的是 JWT 身份验证:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
...
}
只需将 @api_view(['GET'])
装饰器添加到您的视图中,例如
from rest_framework.decorators import api_view
@api_view(['GET'])
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
def test_view(request):
return HttpResponse("Allowed")