自定义用户设置认证,因为jwt默认是用用户名验证请求到后端的,而往往很多注册是通过手机号来进行验证登录的, 需要重写认证方式。
1、在settings文件中加入AUTHENTICATION_BACKENDS 的配置。
AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
)
2、在users模块中的views文件中编写一个类。自定义用户验证一定要继承ModelBackend类。然后重写其中的authenticate的函数。
其中user = User.objects.get(Q(username=username)|Q(mobile=username))这表示用用户名或者手机号来验证。
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from django.db.models import Q
# Create your views here.
User = get_user_model()
class CustomBackend(ModelBackend):
"""
自定义用户验证
"""
def authenticate(self, username=None, password=None, **kwargs):
try:
user = User.objects.get(Q(username=username)|Q(mobile=username))
if user.check_password(password):
return user
except Exception as e:
return None
jwt中其他配置:
# jwt 过期时间 在settings文件中
import datatime
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}
#days=3,参数 时间
JWT_EXPIRATION_DELTA 设置时间
JWT_AUTH_HEADER_PREFIX 设置浏览器header