Django 模型密码字段安全性



我正在创建一个体育应用程序,允许用户创建自己的联赛并邀请他们的朋友参加比赛。 理想情况下,我想用密码保护联盟。 这是目前的表格:

class StraightRedPersonalLeague(models.Model):
    seasonid = models.IntegerField(primary_key = True)
    personalleaguelongname = models.CharField(max_length=36)
    personalleagueshortname = models.CharField(max_length=24)
    leaguepassword = ????
    leagueispublic = models.NullBooleanField(null=True)
    soccerseason = models.ForeignKey('straightred.StraightredSeason', db_column='soccerseasonid', related_name='personalleague_seasonUserSelection')

    class Meta:
        managed = True
        db_table = 'straightred_personalleague'

我在堆栈溢出上搜索并找到了以下内容:

如何在模型 django 中创建密码字段

答案没有被接受,但有一些赞成票。 将密码存储为字符字段是否安全? 如果是这样,我认为forms.PasswordInput是做所有关于安全性的"魔力"的部分。

如能就这一安全问题提供任何建议,将不胜感激。

TLDR

你不应该为此烦恼。你应该使用 django 非常安全的用户身份验证框架。最简单的方法是

class StraightRedPersonalLeague(models.Model):
    seasonid = models.IntegerField(primary_key = True)
    personalleaguelongname = models.CharField(max_length=36)
    user = models.OneToOneField(User)
    leagueispublic = models.NullBooleanField(null=True)
    soccerseason = models.ForeignKey('straightred.StraightredSeason', db_column='soccerseasonid', related_name='personalleague_seasonUserSelection')

    class Meta:
        managed = True
        db_table = 'straightred_personalleague'

让 Django 担心保护密码。

形式。密码输入

这没有魔力,它基本上映射到HTML密码字段。 forms.PassworodInput仅用于用户输入,并不规定密码在数据库中的实际存储方式。

密码存储字段

django.contrib.auth.models.User继承自 AbstractBaseUser,这就是在其中定义密码字段的方式:

password = models.CharField(_('password'), max_length=128)
但是,

(而且很大,但是(,幕后有很多工作要做,以确保密码被安全地散列。

密码存储为 CharField 是安全的,但您必须对其进行哈希处理。您可以在此处查看如何散列密码。这是有关set_password()方法的官方文档。

你最好从AbstractUser继承它,因为它已经拥有所有的密码安全工具。

最新更新