2015-11-11 119 views
2

我有這樣的自定義用戶模式:Django的REST框架不驗證自定義用戶模型

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

這種觀點是supossed需要身份驗證才能運行:

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

當我啓動網址爲此,它將始終運行,無論我是否在我的授權標頭中提供憑證。我的猜測是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'), 
    ... 
) 
+0

有你在您的settings.py文件中將'AUTH_USER_MODEL'設置爲您的自定義用戶模型?並且還會顯示您正在嘗試請求的「urls」和網址。 –

+0

Anush是我的AUTH_USER_MODEL已設置。我添加了url文件和一些其他設置。 –

回答

1

只需添加@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") 
+0

是的,這工作。不知道api_view是其他裝飾器工作所需的。謝謝! –

0

添加以下的settings.py

如果您正在使用DRF令牌驗證:

INSTALLED_APPS = (
    ... 
    'rest_framework.authtoken' 
) 

如果您使用JWT驗證:

REST_FRAMEWORK = { 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
    ), 
    ... 
} 
+0

謝謝Serjik,但rest_framework.authtoken已經在我安裝的應用程序中。而且我甚至不知道什麼是jwt,所以我想我不會使用它。我在我的問題中添加了更多細節。 –

+0

JWT = JSON Web令牌認證,https://github.com/GetBlimp/django-rest-framework-jwt,我建議嘗試,這是我對項目的主要認證 – Serjik

+0

看起來有趣,我會試試看。謝謝! –

相關問題