Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django,在注册中输入散列密码并将其存储为散列密码_Python_Django_Rest_Django Rest Framework_Openedx - Fatal编程技术网

Python django,在注册中输入散列密码并将其存储为散列密码

Python django,在注册中输入散列密码并将其存储为散列密码,python,django,rest,django-rest-framework,openedx,Python,Django,Rest,Django Rest Framework,Openedx,我正在使用openedx(在django上工作),我需要创建一个api来注册来自特定站点的用户,我得到的是一个非正常的哈希密码,我需要将其保存为正常密码 这里的问题是openedx的注册函数散列传递给它的密码 那么,在django中有没有一种方法可以存储密码/注册用户,而无需对密码进行散列 我应该直接使用更新用户的凭据吗 raw() 任何帮助都将不胜感激,谢谢 我建议覆盖用户模型中的方法setset\u password class MyUser(AbstractBaseUser):

我正在使用openedx(在django上工作),我需要创建一个api来注册来自特定站点的用户,我得到的是一个非正常的哈希密码,我需要将其保存为正常密码

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

那么,在django中有没有一种方法可以存储密码/注册用户,而无需对密码进行散列

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

raw()

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

我建议覆盖用户模型中的方法set
set\u 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

或者甚至覆盖默认用户模型
设置密码
方法。

我建议覆盖用户模型中的方法集
设置密码

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\u password
方法。

它非常简单:

from django.contrib.auth.models import User
User.objects.filter(username="myuser").update(password=hashed_password)
(请记住,密码在数据库中存储为散列值)

它非常简单:

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

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

打开edX
manage\u user
管理命令,在创建新用户时支持此用例

例如:

/manage.py lms--settings=devstack manage\u user janejane@example.com--初始密码散列“pbkdf2_sha256$20000$mRxYkenyBiH6$yIk8aZYmWisW2voX5qP+cAr+i7R/IrZoohGsRK2fy4E=”

但是,该命令需要最新版本的Open edX,如果用户帐户已存在,则该命令将不会产生任何效果


作为替代方案,您可以使用OAuth2在外部应用程序和Open edX之间设置SSO,在这种情况下,Open edX根本不需要存储任何密码。

Open edX
manage\u user
management命令在创建新用户时支持此用例

例如:

/manage.py lms--settings=devstack manage\u user janejane@example.com--初始密码散列“pbkdf2_sha256$20000$mRxYkenyBiH6$yIk8aZYmWisW2voX5qP+cAr+i7R/IrZoohGsRK2fy4E=”

但是,该命令需要最新版本的Open edX,如果用户帐户已存在,则该命令将不会产生任何效果


作为替代方案,您可以使用OAuth2在外部应用程序和Open edX之间设置SSO,在这种情况下,Open edX根本不需要存储任何密码。

FYI,最好将答案标记为正确,或者提供建议答案不起作用的详细信息。FYI,最好的做法是将答案标记为正确,或者提供建议答案不适用的详细信息。嘿,谢谢你的回答。。你能告诉我一些关于openedx和一些应用程序之间的sso的资料吗?虽然它目前缺少OAuth2的详细信息,但有一些文档,这是最简单的方法。基本上,您需要启用第三方身份验证功能(请参阅文档),然后转到django管理员,并使用django管理员的OAuth2提供程序设置区域来配置OAuth2。嘿,谢谢您的回答。。你能告诉我一些关于openedx和一些应用程序之间的sso的资料吗?虽然它目前缺少OAuth2的详细信息,但有一些文档,这是最简单的方法。本质上,您需要启用第三方身份验证功能(请参阅文档),然后转到django管理员,并使用django管理员的OAuth2提供程序设置区域来配置OAuth2。