码迷,mamicode.com
首页 > 其他好文 > 详细

认证之匿名用户

时间:2020-03-23 00:11:47      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:ram   必须   mes   ons   username   war   none   ade   方法   

需求:匿名用户和User都能访问这条url

path(host/, views.HostView.as_view({get: list})),  # 匿名测试

流程:

  1、认证时,User访问返Tuer,匿名用户必须返回None,即不处理

# 认证类
class Authentication(object):

    def authenticate(self, request):
        token = request.GET.get(token)
        obj = models.Token.objects.filter(token=token).first()
        if obj:
            # return obj.user.username, obj.token
            return obj.user, obj.token
        else:
            # raise exceptions.AuthenticationFailed(‘验证失败‘)
            return None
    # 不加这个方法会报错
    def authenticate_header(self, request):
        pass
# 匿名用户和User都能访问
class HostView(viewsets.ModelViewSet):
    authentication_classes = [utils.Authentication]  # 认证是匿名还是User,匿名用户在认证时返回None
    pagination_class = []  # 都能访问不需要加权限

    def list(self, request, *args, **kwargs):
        print(request.data)
        return Response(我是匿名用户)

  2、其它正常视图的权限便要加多一层处理,需要判断当前访问对象时User还是匿名用户

# 权限类
class PermissionCheck(object):
    message = "请登录"

    # 这里的request属于APIview重新构造的reuqest,经过认证后,认证组件返回一个request.user和request.auth,
    # 这两个的返回结果在自己的认证类中自定义返回的结果,所以这里能够直接调用
    def has_permission(self, request, view):
        if request.user:  # 如果是用户 继续走下一条权限
            return True
        else:
            return False

class PermissionCheckTwo(object):
    message = "你不是超级管理员"
    def has_permission(self, request, view):
        if request.user.role == 3:
            return True
        else:
            return False
class BookView(viewsets.ModelViewSet):
    authentication_classes = [utils.Authentication, ] 
    permission_classes = [utils.PermissionCheck, utils.PermissionCheckTwo]  # 加多一次权限验证
    queryset = models.Book.objects.all()
    serializer_class = serializers.BookSerializers

 

也可以在settings中设置匿名用户:  

REST_FRAMEWORK = {
    UNAUTHENTICATED_USER: None,
    UNAUTHENTICATED_TOKEN: None,
}

 

认证之匿名用户

标签:ram   必须   mes   ons   username   war   none   ade   方法   

原文地址:https://www.cnblogs.com/aizhinong/p/12549396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!