如何在Django rest框架ViewSet中对不同的功能使用不同的身份验证

Qing

如何在Django rest框架ViewSet中对不同的功能使用不同的身份验证?

我创建了一个UserViewSet,它具有2个功能:

1.列表(列出所有已注册的用户,permission_classes应为IsAuthenticated)

2.注册(注册一个新用户,permission_classes应该是AllowAny)。

--------------------views.py-----------------------------------

class UserViewSet(ViewSet):
    @list_route(methods=['get'], permission_classes = [IsAuthenticated, ])
    def list(self, request):
        ...
        ...

    @list_route(methods=['post'], permission_classes = [AllowAny, ])
    def register(self, request):
        ...
        ...


--------------------urls.py-----------------------------------

users_list = views.UserViewSet.as_view({
    'get': 'list',
    'post': 'register'
})

urlpatterns = [
    url(r'^$', users_list, name='users-list'),
    ...
    ...
]


--------------------settings.py---------------------------------

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}
...
...

命令行注册用户:

curl -H "Content-Type: application/json" -X POST -d '{ "email":"[email protected]"}' http://192.168.30.45:8000/users/

回复:

{"detail":"Authentication credentials were not provided."}

我的“注册”功能的“ permission_class”设置为“ AllowAny”,还需要身份验证吗?为什么会这样?

风向

您的代码似乎可以正常工作,我真的不知道出了什么问题,但是您可以尝试编写自定义权限:

class IsAuthenticatedOrCreate(permissions.IsAuthenticated):
    def has_permission(self, request, view):
        if request.method == 'POST':
            return True
        return super(IsAuthenticatedOrCreate, self).\
            has_permission(request, view)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Django REST框架的ModelViewSet中对不同的操作使用不同的身份验证

如何在Django rest框架的ViewSet中设置方法以不要求身份验证

如何在 Laravel 中为不同的控制器使用不同的身份验证

Spring Boot 如何使用不同的身份验证方案拥有 Thymeleaf 网页和 REST API

使用Django REST框架的本地和mod_wsgi服务器之间的Django JWT身份验证行为不同

如何在Route中添加django rest框架身份验证?

如何在 django rest 框架中实现过滤器和基本身份验证?

Django:多个管理页面使用相同的模型但使用不同的身份验证模式

如何在Django REST Framework中禁用身份验证

如何在Django REST Framework中使用身份验证

基于Django rest框架功能的视图中的身份验证

如何在Firebase中管理用户的不同身份验证

如何使用不同的SSL客户端身份验证证书创建Apache HttpClients池

如何使用不同的服务帐户凭据对Google API进行身份验证?

如何在 django rest 框架中实现不同的用户?

如何在Spring Boot Security 2.0中使用2种不同的身份验证方法

django身份验证可以与django rest框架基本身份验证结合使用吗?

使用Django REST框架的SAML SSO身份验证

使用Django REST框架进行JWT身份验证

ViewSet仅在一项REST操作上使用令牌身份验证(Django Rest)

Django Rest 框架 JWT 身份验证

身份验证失败的Django Rest框架

如何在入口控制器中为不同的目标创建不同的身份验证类型?

如何在 pam 策略中为不同的用户或组设置不同的身份验证要求?

如何自定义Django rest框架中的[未提供身份验证凭据]错误消息

如何在Django中启用基本访问身份验证

如何在django rest_framework test中的APIClient标头中添加身份验证令牌

如何在基于类的视图中使用 django REST JWT 授权和身份验证

如何在不同的选择上使用不同的功能