django内置的用户认证方式是支持用户名和密码,而实际的项目开发中,登录方式往往不止一种,因此,需要重写用户认证类,指明新的认证方式
django
自定义身份认证类
utils/auth.py
,在项目中创建一个文件,自定义认证类
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.hashers import check_password
from django.db.models import Q
from user.models import User
# 自己定义完认证类,需要在 settings.py 中指明配置项
class AuthBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
"""需要继承django内置的用户认证类,并重写认证方法,可以支持多种方式进行登录"""
try:
user = User.objects.get(Q(username=username) | Q(mobile=username) | Q(email=username))
except Exception as e:
return None
# 校验密码: 先写 需要校验的密码, 后写 加密后的密码
if check_password(password, user.password):
return user
else:
return None
指明配置项
在配置文件中,指明身份认证类
# 指定用户认证引擎
AUTHENTICATION_BACKENDS = [
'utils.auth.AuthBackend' , # 自己定义的认证类路径
]
退出登录
Vue
- 现在使用的用户认证方式是jwt
- jwt的失效过期,django后端无法控制,因此用户退出时,只需要删除webstroage中存储的jwt即可