我正在try 创建一个auth后端,以允许我的用户使用他们的邮箱地址或他们在Django 1.6中的用户名使用自定义用户模型进行登录.当我使用用户名登录,但由于某种原因不能使用邮箱登录时,后端可以正常工作.我是不是忘了做什么事?
from django.conf import settings
from django.contrib.auth.models import User
class EmailOrUsernameModelBackend(object):
"""
This is a ModelBacked that allows authentication with either a username or an email address.
"""
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, username):
try:
return User.objects.get(pk=username)
except User.DoesNotExist:
return None
编辑:按照建议,我已从ModelBackend继承并将其安装在我的设置中 我的设置里有这个 身份验证_后端=( ‘users.backends’, ‘django.contri.auth.backends.ModelBackend’, ) 我已经将后端更改为以下内容:
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.auth.backends import ModelBackend
class EmailOrUsernameModelBackend(ModelBackend):
"""
This is a ModelBacked that allows authentication with either a username or an email address.
"""
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, username):
try:
return User.objects.get(pk=username)
except User.DoesNotExist:
return None
现在我得到一个Module "users" does not define a "backends" attribute/class
错误.