我正在创建一个体育应用程序,允许用户创建自己的联赛并邀请他们的朋友参加比赛。 理想情况下,我想用密码保护联盟。 这是目前的表格:
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继承它,因为它已经拥有所有的密码安全工具。