我有一个Django应用程序,允许Web访问者创建自己的帐户.一旦他们使用密码创建帐户,他们就会收到包含激活码的电子邮件.当网络访问者创建新帐户时,他们需要接收包含唯一密钥的激活电子邮件.
显然,我可以使用Django的内置身份验证系统完成所有这些工作.我以前做过没有任何问题.但是,在此应用程序中,我不想使用非活动用户污染我的Users表.我只希望激活的用户出现在Users表中.因此,虽然我将使用Django的帐户系统来验证激活的用户,但是在它们被激活之前,我正在使用我自己的系统.我将所有关于尚未激活的用户的数据保存在一个单独的Django Model对象中(称为UserActivation).我将自己管理激活电子邮件的发送.
我遇到的问题是我不想将用户提交的密码存储在纯文本中.我想将它存储在我的UserActivation对象中的一个名为"password"的字段中,其格式与User表中显示的格式相同.把它放到用户对象中,我会做的myUser.set_password("plainTextPassword").我怎样才能获得相同的价值并将其融入其中UserActivation.password?
从查看此文档,似乎有一个make_password()函数返回我需要的值.但我仍然需要一个User对象来调用该方法.如何"plainTextPassword"在不通过User对象的情况下转换为哈希密码?
Nit*_*ora 17
你走在正确的轨道上.但是,您可以使用手动管理密码
from django.contrib.auth.hashers import make_password
print "Hashed password is:", make_password("plain_text")
Run Code Online (Sandbox Code Playgroud)
Hasher配置将由PASSWORD_HASHERS驱动,这对于auth系统和UserActivation模型都应该是通用的.但是你也可以在make_password方法中传递它.
PASSWORD_HASHERS = (
'myproject.hashers.MyPBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.BCryptPasswordHasher',
'django.contrib.auth.hashers.SHA1PasswordHasher',
'django.contrib.auth.hashers.MD5PasswordHasher',
'django.contrib.auth.hashers.CryptPasswordHasher',
)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
请阅读此链接以获取更多详细信息:https: //docs.djangoproject.com/en/dev/topics/auth/passwords/
MIk*_*kee 13
接受的答案对我有帮助 - 我只是想添加check_password调用(对于像我这样的人,之前没有使用过这个功能)
from django.contrib.auth.hashers import make_password, check_password
hashed_pwd = make_password("plain_text")
check_password("plain_text",hashed_pwd) # returns True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8350 次 |
| 最近记录: |