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,用户名等。

你可能感兴趣的:(Django)