我是Django的新手,想询问用户身份验证和登录。我阅读了文档,但我无法找到正确的答案/方向。基本上,我必须集成到遗留系统中,所以我不能使用默认的auth_user
表或类似的东西。我在我的应用程序中定义了一个模型,如下所示:
class User(models.Model):
class Meta:
db_table = 'user'
def __unicode__(self):
return self.first_name + ' ' + self.last_name
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
email = models.CharField(max_length=64)
password = models.CharField(max_length=32)
active = models.CharField(max_length=1)
last_modified = models.DateTimeField("last modified")
timestamp = models.DateTimeField("timestamp")
我的问题是,如何使用上述模型(或者我应该对其进行哪些更改)才能使用身份验证应用?现在,根据文档,我有以下后端进行身份验证:
class CustomAuth(ModelBackend):
def authenticate(**credentials):
return super(CustomAuth, self).authenticate(**credentials)
def authenticate(self, username=None, password=None):
# Check the username/password and return a User.
if username != None and password != None:
# Get the user
try:
user = User.objects.get(email=username)
if user.check_password(password):
logger.info('User is authenticated, logging user in')
return user
except User.DoesNotExist:
pass
return None
def get_user(self, user_id):
try:
return User.objects.get(id=user_id)
except User.DoesNotExist:
return None
我试着按照以下方式进行测试:
user = authenticate(username='test@gmail.com', password='testUser')
我不断收到'module' object is not callable
等各种错误。我还在settings.py
文件中包含了我的自定义身份验证。我有什么想做的例子吗?感谢任何帮助,谢谢!
修改 我把我的模型改为以下:
from django.db import models
from django.contrib.auth.models import User as AuthUser, UserManager
# Extend the base User model
class User(AuthUser):
class Meta:
db_table = 'user'
active = models.CharField(max_length=1)
last_modified = models.DateTimeField("last modified")
objects = UserManager()
答案 0 :(得分:3)
看起来一个问题是您的自定义后端有两个authenticate
方法。你可能想删除最上面的一个。
以下是an example如何编写自定义后端来处理基于电子邮件地址的登录。