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