django - 将 Django 从 2.0 升级到 2.2 会破坏自定义身份验证
问题描述
下面的文件是关于自定义身份验证的,主要是使用电子邮件作为用户名,它在 Django 2.0.x 上运行良好。我在 Django 2.2 中开始了一个全新的项目,但它不再起作用了。为什么?
authmanager/helper_functions.py
from django.contrib.auth import authenticate, login, logout
def _login(request):
if request.method == 'POST':
username = request.POST['email']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return True
else:
return False
else:
return False
def _logout(request):
request.session.flush()
logout(request)
return True
authmanager/mybackend.py
from django.contrib.auth.hashers import check_password
from django.contrib.auth import backends
from .models import User
class MyCustomBackend(backends.ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = User.objects.get(email=username)
if user and check_password(password, user.password):
return user
else:
return None
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk = user_id)
except User.DoesNotExist:
return None
设置.py
AUTHENTICATION_BACKENDS = ['crm.authmanager.mybackend.MyCustomBackend',]
AUTH_USER_MODEL = 'authmanager.User'
解决方案
推荐阅读
- mysql - 如何将图片和名称发送到数据库?
- java - 在 SpringData Jpa Repository 中而不是在实体中设置表名
- win-universal-app - Xamarin Form - 如何在 UWP 中选中另一个复选框上的复选框
- gnu - 在检查节标题时,readelf 显示的列的含义是什么?
- .net - IIS 上托管的 WCF Web 服务返回空的 xml 响应
- r - 在 r 中每 3 小时对一组数据进行排序
- python - 为什么 PyCharm 通过两种不同的方法突出显示相同的检查违规(类型检查器)?
- c++ - 从执行 boost::fibers 中排除一个线程
- excel - 将文件从一个工作表复制并粘贴到另一个工作表时出现 VBA 错误 1004“应用程序定义或对象定义错误”
- r - 如何正确地将转换后的变量添加到 ggplot 轴