django,在注册时输入哈希密码并将其存储

时间:2016-06-30 10:04:26

标签: python django rest django-rest-framework openedx

我正在使用opensx(在django上工作),我需要创建一个api来注册来自特定网站的用户,我正在获得一个哈希密码而不是正常的密码,我需要保存它。

这里的问题是openx的注册函数会哈希传递给它的密码。

所以在django中有一种方法可以存储密码/注册用户而无需散列密码。

我应该使用

直接更新用户的凭据
raw()

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

3 个答案:

答案 0 :(得分:1)

我建议在user_model中覆盖方法集set_password

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方法。

答案 1 :(得分:1)

这很简单:

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

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

答案 2 :(得分:0)

Open edX manage_user管理命令was recently updated,以便在创建新用户时支持此用例。

示例:

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