rest_framework_jwt源码分析——obtain_jwt_token

本文记录了使用rest_framework_jwt在SQL Server数据库环境下遇到的坑,详细分析了obtan_jwt_token的流程,包括序列化过程中的username_field方法和validate方法,以及authenticate在验证username和password中的作用。内容涵盖了JWT认证的关键步骤和源码细节。

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

1 踩坑过程记录:

项目使用的是SQL Server数据库,而且大部分数据表是现成的,前期因为安装一些连接sql的一些库老是失败,所以就没有把sql设置为默认数据库,直接使用sql的原生操作语句,这也为后面使用jwt踩坑埋下伏笔。

2 obtan_jwt_token流程分析

之前没有接触过jwt,在网上查阅rest_framework_jwt的使用,描述的都是大同小异,都是一些无关痛痒的内容,详细的、深层次一些的很少,对于我所遇到的问题就根本没有了(可能是我没有找到)。于是自己只能一步一步的去分析源码了。

从这一步可以看出obtanin_jwt_token是简化的写法了,本质上和我们自己写的类视图添加到url中的操作是一样的,都需要以as_view()作为后缀。

obtain_jwt_token = ObtainJSONWebToken.as_view()

此处内容不多,就两:
1:继承JSONWebTokenAPIView,序列化后如果是有效的,就是验证通过了,返回token;
2::JSONWebTokenSerializer,其实username和password的验证是在这里完成的。

class ObtainJSONWebToken(JSONWebTokenAPIView):
    """
    API View 接收POST传来的两个主要参数username和password,这两个参数用于后面的验证,验证通过后才会返回token
    """
    serializer_class = JSONWebTokenSerializer
先说序列化:
class JSONWebTokenSerializer(Serializer):
    """
    这个类就是验证username和password的

    custom UserModel.USERNAME_FIELD识别username

    Returns a JSON Web Token that can be used to authenticate later calls.
    """
    def __init__(self, *args, **kwargs):
        """
        Dynamically add the USERNAME_FIELD to self.fields.
        """
        super(JSONWebTokenSerializer, self).__init__(*args, **kwargs)

        self.fields[self.username_field] = serializers.CharField()
        self.fields['password'] = PasswordField(write_only=True)
	
    @property
    def username_field(self):
        return get_username_field()

    def validate(self, attrs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值