JWT手动签发| 自动签发

# 手动签发
from rest_framework_jwt.serializers import jwt_payload_handler,jwt_encode_handler

class UserModelSerializer(ModelSerializer):
    username = serializers.CharField(max_length=32)

    class Meta:
        model = models.UserInfo
        fields = ['username', 'password', 'id']
        extra_kwargs = {
            'id': {'read_only': True},
            'password': {'write_only': True}
        }

    def validate(self, attrs):
        # 验证用户
        user = self._get_user(attrs)
        # 签发token
        token = self._get_token(user)
        # 将验证后的数据保存下来,给视图使用
        self.context['token'] = token
        self.context['user'] = user
        return attrs

    def _get_user(self, attrs):
        username = attrs.get('username')
        password = attrs.get('password')
        import re
        # 后台验证账号类型
        if re.match('^1[3-9][0-9]{9}$', username):
            user = models.UserInfo.objects.filter(telephone=username).first()
        elif re.match('^.*@.*$', username):
            user = models.UserInfo.objects.filter(email=username).first()
        else:
            user = models.UserInfo.objects.filter(username=username).first()
        if user:
            ret = user.check_password(password)
            if ret:
                user.last_login = datetime.datetime.now()
                user.save()
                return user
            else:
                raise ValidationError('密码错误')
        else:
            raise ValidationError('用户不存在')

    def _get_token(self, user):
        # 获取签发
        payload = jwt_payload_handler(user)
        # 签发encode成token
        token = jwt_encode_handler(payload)
        return token
# 自动签发
from rest_framework_jwt.views import obtain_jwt_token

ulrpatterns = [
        path('log',obtain_jwt_token)
]

# post 方法,携带username 和 password ,该方法会自动查询user表进行验证,并返回token
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦琦不是MQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值