【问题标题】:User authentication in django with custom user model and table使用自定义用户模型和表在 django 中进行用户身份验证
【发布时间】:2012-07-02 08:38:15
【问题描述】:

我对 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()

【问题讨论】:

  • 你读过thisthisthis,基本上你扩展/关联“默认”用户模型而不是自己制作。
  • 您说的是继承自框架中内置的User 模型?我不想这样做的原因是,它需要我有各种我不需要/不想要的列,因为我正在集成到遗留数据模型中......或者我的理解不正确?
  • 我找到了一篇适合我的文章...不确定这是否是推荐的方式? tomforb.es/using-a-custom-sqlalchemy-users-model-with-django

标签: django authentication django-models python-2.7


【解决方案1】:

看起来一个问题是您的自定义后端有两个authenticate 方法。您可能想删除顶部的。

这里是an example,介绍如何编写自定义后端来处理基于电子邮件地址的登录。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多