首页 > 解决方案 > 将 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'

标签: django

解决方案


推荐阅读