django 1.9 createsuperuser 绕过密码验证检查

Posted

技术标签:

【中文标题】django 1.9 createsuperuser 绕过密码验证检查【英文标题】:django 1.9 createsuperuser bypass the password validation checking 【发布时间】:2016-05-21 16:22:24 【问题描述】:

尝试在新的 django 1.9 版本上工作,并通过以下方式创建一个超级用户:

python manage.py createsuperuser

而我只是想在本地开发环境使用一个简单的密码,比如只有一个字符,django1.9升级到非常严格的密码验证策略,如何绕过呢?

Password: 
Password (again): 

This password is too short. It must contain at least 8 characters.

This password is too common.

This password is entirely numeric.

【问题讨论】:

不使用弱密码的习惯如何?使用KeePass 之类的东西来生成和存储密码并自动将密码输入到应用程序中? 如何将控制权交给用户并让他们决定什么是适当的安全立场? KeePass 没有解决我没有登录浏览器窗口的无数情况。 【参考方案1】:

使用复杂密码创建超级用户后,您可以在 shell (./manage.py shell) 中将其设置为更简单的内容:

from django.contrib.auth.models import User
user = User.objects.get(username='your_user')
user.set_password('simple')
user.save()

【讨论】:

你也可以运行 './manage.py shell' 或 'python manage.py shell' 否 -- 是必需的【参考方案2】:

您可以在您的开发环境中更改 AUTH_PASSWORD_VALIDATORS 设置。请参阅文档:https://docs.djangoproject.com/en/stable/topics/auth/passwords/#s-enabling-password-validation。

这很简单:您将识别出导致您的警告消息的验证器。

【讨论】:

【参考方案3】:

实际上,您不需要修改验证器设置或先创建一个复杂的密码,然后再更改它。相反,您可以创建一个简单的密码,直接绕过所有密码验证器。

打开 django shell

python manage.py shell

类型:

from django.contrib.auth.models import User

按回车键,然后输入(例如,使用仅包含字母“a”的密码):

User.objects.create_superuser('someusername', 'something@example.com', 'a')

再次按回车键就完成了。

【讨论】:

【参考方案4】:

mimo的答案是正确的,但如果你不使用默认的User 模型就不起作用

根据mimo的回答和这个article,我把脚本改成了这个

from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(email='user@mail.com')
# or user = User.objects.get(username='your_user')
user.set_password('simple')
user.save()

【讨论】:

以上是关于django 1.9 createsuperuser 绕过密码验证检查的主要内容,如果未能解决你的问题,请参考以下文章

后台创建管理员 createsuperuser 时 报django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module

实现自定义用户模型时 createsuperuser 的问题

django 1.9 wsgi + nginx

Django 1.9 中的新 url 格式

Django 1.9 加载数据错误

Django 调试工具栏安装(Django 1.9)