0

我正在研究openxx(在django上工作),我需要创建一个api来注册来自特定站点的用户,我得到的是一个散列密码而不是普通密码,我需要保存它。

这里的问题是openxx的注册函数散列了传递给它的密码。

那么在 django 中有没有一种方法来存储密码/注册用户而无需散列密码。

我应该直接使用更新用户的凭据吗

raw()

任何帮助将不胜感激,谢谢。

4

3 回答 3

1

它很简单:

from django.contrib.auth.models import User
User.objects.filter(username="myuser").update(password=hashed_password)

(记住密码作为散列值存储在数据库中)

于 2016-07-04T07:19:41.677 回答
1

我建议覆盖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方法。

于 2016-06-30T13:08:47.303 回答
0

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 根本不需要存储任何密码。

于 2016-08-03T22:15:40.230 回答