### 多账号登录
#### 1.改写authenticate的判定方式(自定义认证后端)
- 在utils包中,新定义authenticate模块
- 新建验证类继承class MeiduoModelBackend(ModelBackend):
```python
from django.contrib.auth.backend import ModelBackend #导入原authenticate方法所属类
import users.models import User# 导入所建模型类(创建的数据库表类用于提取字段内容进行对比
import re # 导入正则表达式,用于匹配传入的username格式
class MeiduoModelBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs)
# 变量username的值,可以是用户名,也可以是手机号,需要判断,再查询
# 方法一:
try:
if re.match('^1[3-9]\d{9}',username) # 验证所传数据是否为手机号
user = User.objects.get(mobile=username)
else:
user = User.objects.get(username=username)
except:
return None
# 方法二:(实现用手机号注册的账户)
try:
user = User.objects.get(username=username)
except:
try:
user = User.objects.get(mobile=username)
except:
return None
# 查找到用户以后,进行密码校对
if user.check_password(password):
return user
else:
return None
# 最终的authenticate方法返回的是user对象,或者是None
```
#### 2.配置自定义用户认证后端
- 在dev.py中指定自定义的用户认证后端
```python
AUTHENTICATION_BACKENDS = ['meiduo_mall.utils.MobileAuthBackend']
```
|
|