2

このカスタム ユーザー モデルがあります。

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 を起動すると、認証ヘッダーに資格情報を提供するかどうかに関係なく、常に実行されます。request.user オブジェクトには AnonymousUser インスタンスが含まれているため、残りのフレームワークは django のデフォルトのユーザー モデルを使用していると思います。しかし、データベースを確認したところ、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'),
    ...
)
4

2 に答える 2

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")
于 2015-11-11T18:51:54.400 に答える
0

以下を settings.py に追加します。

DRF トークン認証を使用している場合:

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

JWT 認証を使用している場合:

REST_FRAMEWORK = {
     'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
    ...
}
于 2015-11-11T18:25:06.783 に答える