我正在使用opensx(在django上工作),我需要创建一个api来注册来自特定网站的用户,我正在获得一个哈希密码而不是正常的密码,我需要保存它。
这里的问题是openx的注册函数会哈希传递给它的密码。
所以在django中有一种方法可以存储密码/注册用户而无需散列密码。
我应该使用
直接更新用户的凭据raw()
任何帮助将不胜感激,谢谢。
答案 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根本不需要存储任何密码。