DJANGO REST API - 如何限制用户对 API 的访问?

问题描述 投票:0回答:1

因此,我一直在使用 William Vincent 的《REST API 与 Django》一书将 REST API 组合在一起。 我已经按照书本准备好了一切,但我有点菜鸟,所以我需要专业人士的一些澄清。

如何限制具有令牌的用户查看 API 中的某些信息?

使用Token创建用户:

我将

authentication_classes = [TokenAuthentication]
添加到
class UserList
中,认为如果用户使用令牌登录,则登录用户将能够访问我的 api 的信息,但我得到以下信息:

当我删除

authentication_classes = [TokenAuthentication]
时,我得到以下内容。

所有用户都可以看到我的 API,但我不希望这样,我只希望拥有 Token 的用户可以查看我的 api。

非常感谢任何帮助!

谢谢! 代码如下

# api/views.py

from django.contrib.auth import get_user_model

from rest_framework import generics, permissions
from rest_framework.authentication import TokenAuthentication
from .serializers import UserSerializer

# Display List View - User
class UserList(generics.ListAPIView):
    queryset = get_user_model().objects.all()
    serializer_class = UserSerializer
    permission_classes = (permissions.IsAuthenticated,)
    authentication_classes = [TokenAuthentication]

# api/serializers.py

from django.contrib.auth import get_user_model
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields =('id', 'username', 'email',)

#api/urls.py

from django.urls import path
from .views import  (UserList)

urlpatterns = [
    path('users/', UserList.as_view()),    
]

#master_application/urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('users.urls')),
    path('api/', include('api.urls')),
    path('api-auth/', include('rest_framework.urls')),
    path('api/rest-auth/', include('rest_auth.urls')),
    path('api/rest-auth/registration/', include('rest_auth.registration.urls')),
    path('', include('django.contrib.auth.urls')),    
    path('users/', include('users.urls')),
    path('users/', include('django.contrib.auth.urls')),
]

设置.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
       'rest_framework.authentication.SessionAuthentication',
       'rest_framework.authentication.TokenAuthentication', 
    ]
}
python django django-rest-framework django-rest-auth
1个回答
-1
投票

将删除

authentication_classes = [TokenAuthentication]
。谢谢大家。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.