DRF框架登录功能自定义认证和自定义的处理返回数据

1.在users模块创建utils.py,通过这个方法验证是否为正确的用户

from django.contrib.auth.backends import ModelBackend
import re
from . import models
class UserPhoneEmail(ModelBackend):
    '''
    当前的类是用来定义自定义的认证方法
    '''
    def authenticate(self, request, username=None, password=None, **kwargs):
        # 重写父类方法
        # todo 通过手机号,用户名,邮箱获取对象
        try:
            # todo 通过正则判断是手机号还是用户名还是邮箱
            if re.match(r'^1[\d]{10}$',username):
                user=models.User.objects.get(phone=username)
            elif re.match(r'^[\w]+@[\w]+\.com$', username):
                user = models.User.objects.get(email=username)
            else:
                user = models.User.objects.get(username=username)
        except models.User.DoesNotExist:
            user = None

        # todo 拿到user后,进行校验
        if user is not None and user.check_password():
            return user

2.在setting里进行配置

JWT_AUTH={
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
}

3.设置url

from rest_framework_jwt.views import obtain_jwt_token
urlpatterns=[
url(r'^login/',obtain_jwt_token),                          #登陆
]

可以看到前端可以获得的只有一个token:
在这里插入图片描述

4.jwt登陆验证成功之后自定义的处理返回数据
通过自定义这种方法可以得到想要的数据

def jwt_response(token,user=None,request=None):
    data={
        'token':token,
        'username':user.username,
        'user_id':user.id
    }
    return data

5.在setting里进行配置

JWT_AUTH={
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
    'JWT_RESPONSE_PAYLOAD_HANDLER':'users.utils.jwt_response'
}

前端获取到的数据
在这里插入图片描述
也就是通过自定义处理返回数据后,可以得到需要的不仅仅有token,也可以有id,用户名等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值