django 头部

这篇博客讲述了作者在使用Django实现JWT验证时遇到的问题,即在通过`self.request.META`或`self.request.headers`访问头部信息时,自定义的变量会被转换为特定形式,如HTTP_USER和User。作者分享了处理这种情况的认证头部中间件代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用django 来实现JWT验证的时候发现, 使用django框架提取头部key的时候框架会自己加一些神奇的地方:

如果用 self.request.META:

自己定义的变量会变成

user -> HTTP_USER

user-name -> HTTP_USER_NAME

 

如果使用self.request.headers

定义的变量会变成

user -> User

user-name ->UserName 双峰命名

 

因此我关于认证头部的中间件代码会变为:

class JWTQueryParamsAuthentication(BaseAuthentication):

    def authenticate(self, request):
        info = request.META.get('HTTP_AUTHORIZATION','')
        # info = request.headers
        # print(info)
        #
        #
        # print(info)
        auth = info.split()
        if not auth:
            raise AuthenticationFailed({'msg': '未获取到请求头', 'code': 403})
        if auth[0].lower() != 'jwt':
            raise AuthenticationFailed({'msg': '请求头认证方式错误', 'code': 403})
        if len(auth) == 1 or len(auth) > 2:
            raise AuthenticationFailed({'msg': "非法请求头", 'code': 403})
        token = auth[1]

        # token = request.query_params.get("token")
        payload = None
        msg = None
        try:
            payload = jwt.decode(token, settings.SECRET_KEY, True)
        except exceptions.ExpiredSignatureError as e:
            msg = 'token已失效'
        except exceptions.DecodeError:
            msg = 'token认证失败'
        except  exceptions.InvalidTokenError:
            msg = '非法的token'
        if not payload:
            raise AuthenticationFailed({'code':403, 'msg':msg})
        #
        # '''
        # 这个中间件类里面可以有三种返回值
        # 1.抛出异常, 后续不执行
        # 2. 认证通过, return 元组 (1,2)---->1.request.user,里面可以是任何东西
        #                                    2.request.auth
        # 3.返回None, 进行下一次认证(?用来干嘛的没有细说)
        # '''
        return (payload, token)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值