认证之匿名用户

Posted aizhinong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认证之匿名用户相关的知识,希望对你有一定的参考价值。

需求:匿名用户和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,
}

 

以上是关于认证之匿名用户的主要内容,如果未能解决你的问题,请参考以下文章

vsftpd 认证模式:匿名开放(匿名用户)本地用户虚拟用户区别?

vsftpd 认证模式:匿名开放(匿名用户)本地用户虚拟用户区别?

Spring Security 认证成功后返回匿名用户

Emq 限制匿名用户访问,开启用户密码认证

emq(v3.1.1)关闭MQTT客户端匿名认证

Mqtt用户认证