我正在研究openxx(在django上工作),我需要创建一个api来注册来自特定站点的用户,我得到的是一个散列密码而不是普通密码,我需要保存它。
这里的问题是openxx的注册函数散列了传递给它的密码。
那么在 django 中有没有一种方法来存储密码/注册用户而无需散列密码。
我应该直接使用更新用户的凭据吗
raw()
任何帮助将不胜感激,谢谢。
我正在研究openxx(在django上工作),我需要创建一个api来注册来自特定站点的用户,我得到的是一个散列密码而不是普通密码,我需要保存它。
这里的问题是openxx的注册函数散列了传递给它的密码。
那么在 django 中有没有一种方法来存储密码/注册用户而无需散列密码。
我应该直接使用更新用户的凭据吗
raw()
任何帮助将不胜感激,谢谢。
它很简单:
from django.contrib.auth.models import User
User.objects.filter(username="myuser").update(password=hashed_password)
(记住密码作为散列值存储在数据库中)
我建议覆盖set_passworduser_model 中设置的方法。
class MyUser(AbstractBaseUser):
# if you need to hash passwords for some users.
is_password_hashed = models.BooleanField(default=True)
...
def set_password(self, raw_password):
if self.is_password_hashed:
super(MyUser, self).set_password(raw_password)
else:
self.password = raw_password
如果您只想存储非散列密码:
class MyUser(AbstractBaseUser):
...
def set_password(self, raw_password):
self.password = raw_password
甚至覆盖默认的用户模型set_password方法。
Open edXmanage_user管理命令最近更新为在创建新用户时支持此用例。
例子:
./manage.py lms --settings=devstack manage_user jane jane@example.com --initial-password-hash 'pbkdf2_sha256$20000$mRxYkenyBiH6$yIk8aZYmWisW2voX5qP+cAr+i7R/IrZoohGsRK2fy4E='
但是,该命令需要 Open edX 的最新版本,如果用户帐户已经存在,它将不会有任何效果。
作为替代方案,您可以使用 OAuth2 在外部应用程序和 Open edX 之间设置 SSO,在这种情况下,Open edX 根本不需要存储任何密码。