我正在创建一个体育应用程序,允许用户创建自己的联赛并邀请他们的朋友玩。理想情况下,我想密码保护联盟。这是目前的表格:
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'
我在stackoverflow上进行了搜索,发现了以下内容:
How to create Password Field in Model django
答案未被接受,但有一些赞成。将密码存储为charfield是否安全?如果是这样,我认为forms.PasswordInput
是正在做所有“神奇”的安全问题的部分。
对此安全问题的任何建议都将不胜感激。
答案 0 :(得分:3)
你不应该为此烦恼。你应该使用django非常安全的user authentication框架。最简单的方法是
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'
让pjango担心保护密码。
这没有魔力,它基本上映射到HTML密码字段。 forms.PassworodInput
仅用于用户输入,并不表示密码实际存储在数据库中的方式。
django.contrib.auth.models.User
继承自AbstractBaseUser,这就是密码字段在其中的定义方式:
password = models.CharField(_('password'), max_length=128)
但是,(而且它很大但是),幕后工作还有很多工作要确保密码是安全的。
答案 1 :(得分:0)
将密码存储为CharField是安全的,但您必须将其哈希。
您可以查看here如何哈希密码。以下是关于set_password()
方法的官方documentation。
答案 2 :(得分:0)
你最好从已经拥有所有密码安全工具的AbstractUser继承它。