django认证

from rest_framework.authentication import BaseAuthentication
from api import models
from rest_framework import exceptions


class GeneralAuthentication(BaseAuthentication):
    """
    通用认证,如果认证功能则返回数据,认证失败自己不处理,交给下一个认证组件处理。
    """
    def authenticate(self, request):
        token = request.META.get('HTTP_AUTHORIZATION', None)
        # 1.如果用户没有提供token,返回None(我不处理,交给下一个认证类处理,则默认是None)
        if not token:
            return None
        # 2.token错误,,返回None(我不处理,交给下一个认证类处理,则默认是None)
        user_object = models.UserInfo.objects.filter(token=token).first()
        if not user_object:
            return None
        # 3.认证成功
        return (user_object,token) # request.user/request.auth


class UserAuthentication(BaseAuthentication):
    """
    用户认证,用户必须先登录。
    """
    def authenticate(self, request):
        token = request.META.get('HTTP_AUTHORIZATION', None)
        # 1.如果用户没有提供token,返回None(我不处理,交给下一个认证类处理,则默认是None)
        if not token:
            raise exceptions.AuthenticationFailed()
        # 2.token错误,,返回None(我不处理,交给下一个认证类处理,则默认是None)
        user_object = models.UserInfo.objects.filter(token=token).first()
        if not user_object:
            raise exceptions.AuthenticationFailed()
        # 3.认证成功
        return (user_object,token) # request.user/request.auth

 

posted @ 2021-07-31 11:02  叶青IT爱好者  阅读(61)  评论(0编辑  收藏  举报