【发布时间】:2018-06-22 01:17:33
【问题描述】:
我想在我的UserViewSet 中禁用创建时的身份验证,这样即使未经身份验证的用户也可以创建帐户。
我在我的应用程序中使用django-oauth-toolkit 进行身份验证,并且我在我的设置中使用他们的身份验证类作为默认值(这很棒)
我曾尝试使用 @authentication_class 装饰器 (https://stackoverflow.com/a/39717881/5438372),但它似乎不适用于 ModelViewSet
我还尝试覆盖get_authenticator 方法,本着与此相同的精神:Django rest framework permission_classes of ViewSet method,但ViewSet.action 似乎在身份验证时不可用。
我该怎么做?我的方法有问题吗?
这是我的代码:
<models.py:>
class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
permission_classes = (IsSelfOrStaffPermission, TokenHasReadWriteScope,)
lookup_field = 'username'
def get_queryset(self):
current_user = self.request.user
if current_user.is_staff:
user_set = User.objects.all()
else:
user_set = User.objects.filter(username=current_user.username)
query = self.request.query_params.get('q', None)
if not query:
return user_set
return user_set.filter(
Q(username__icontains=query) |
Q(first_name__icontains=query) |
Q(last_name__icontains=query)
)
<settings.py:>
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
<permission.py:>
class IsSelfOrStaffPermission(permissions.BasePermission):
"""
Permission to allow user actions on his own profile
"""
def has_object_permission(self, request, view, obj):
return obj == request.user or request.user.is_staff
【问题讨论】:
标签: python django oauth-2.0 django-rest-framework