Skip to main content
 首页 » 编程设计

python之Django 休息框架不验证自定义用户模型

2025年05月04日25Free-Thinker

我有这个自定义用户模型:

class CustomUser(AbstractBaseUser,PermissionsMixin): 
    email = models.CharField(max_length=255, unique=True) 
    .... 

这个 View 应该需要身份验证才能运行:

@authentication_classes((TokenAuthentication,)) 
@permission_classes((IsAuthenticated,)) 
def test_view(request): 
    return HttpResponse("Allowed") 

当我为此启动 url 时,无论我是否在我的授权 header 中提供凭据,它都会始终运行。我的猜测是 rest 框架正在使用 django 的默认用户模型,因为 request.user 对象包含一个 AnonymousUser 实例。但是我检查了数据库,authtoken 表引用了我的自定义用户表。

我认为这应该和我的代码一样简单,但我想我遗漏了什么。有什么想法吗?

编辑:这里有更多细节:

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'), 
    ... 
) 

请您参考如下方法:

只需将 @api_view(['GET']) 装饰器添加到您的 View 中即可

from rest_framework.decorators import api_view 
 
@api_view(['GET']) 
@authentication_classes((TokenAuthentication,)) 
@permission_classes((IsAuthenticated,)) 
def test_view(request): 
    return HttpResponse("Allowed")