DRF 使用 simpleJWT登陆认证(三)自定义认证方法

7 篇文章 2 订阅

正常情况下,系统的方法只校验了用户名和密码,如果在登陆过程中,支持手机号登陆,那么这种校验就会失败,所以需要自定义认证方法。

1、新建一个类,继承 ModelBackend

from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from rest_framework import serializers
from vueshop.models import UserInfo


# 1, 重写系统认证方法
class MyModelBackend(ModelBackend):
    '''默认系统只校验用户名和密码,实际情况,可能有手机号,验证码等其他需要校验的'''
    def authenticate(self, request, username=None, password=None, **kwargs):
        # print(request.data)
        try:
            try:
                # 1、检查用户名,添加了用手机号登陆
                user = UserInfo.objects.get(Q(username=username) | Q(mobile=username))
            except Exception as e:
                raise serializers.ValidationError({'msg': '用户名和手机号未查询到数据,请确认?'})
            # 2, 校验密码
            if user.check_password(password):
                return user
            else:
                # 如果不想密码登录也可以验证码在这里写
                # 这里做验证码的操作
                raise serializers.ValidationError({'msg': '密码错误'})
        except Exception as e:
            raise e

2、配置settings.py

AUTHENTICATION_BACKENDS = ['utils.my_authenticate.MyModelBackend']

3、路由配置

path('login2/', views.Login2View.as_view()),

4、视图

视图这里看不懂的参考前面的文章

class Login2View(TokenObtainPairView):
    serializer_class = MyTokenSerializer

5、验证

username=用户名和password=密码可以正常返回响应,图一
username=手机号和password=密码可以正常返回响应,图二
用户名或者密码错误,返回相应的数据,图三
手机号和密码

用户名和密码
图三
密码不对

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值