无法使用通过固定装置加载的超级用户登录到 Django 管理员
Can't login to django admin with superuser loaded via fixtures
我通过固定装置添加了超级用户:
python manage.py loaddata data.json
这是我的 data.json:
[
{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "admin",
"first_name": "admin",
"last_name": "admin",
"is_active": true,
"is_superuser": true,
"is_staff": true,
"groups": [],
"user_permissions": [],
"password": "admin",
"email": "admin@mail.com"
}
}
]
然后我尝试登录到管理员但出现错误:
"Please enter the correct username and password for a staff account. Note that both fields may be case-sensitive."
输出
dumpdata auth.user --indent 4 > output.json
给他们看
[
{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "admin",
"first_name": "admin",
"last_name": "admin",
"is_active": true,
"is_superuser": true,
"is_staff": true,
"last_login": "2017-09-17T13:01:51.009Z",
"groups": [],
"user_permissions": [],
"password": "admin",
"email": "admin@mail.com",
"date_joined": "2017-09-17T13:01:51.009Z"
}
}
]
我用的是django1.6和sqlite3
我哪里错了?
像所有行为良好的 Web 框架一样,Django stores passwords as hashes。哈希在设计上是单向的:您无法从存储的哈希中获取用户密码。
我怀疑 loaddata
只是将数据按原样插入到您的数据库中。 dumpdata
显示 "password": "admin"
的事实证实了这一点。您将无法以以这种方式创建的用户身份登录,因为没有密码会散列为 "admin"
.
最好的解决方案可能是通过 createsuperuser
、 然后 使用 dumpdata
使用您想要的密码创建一个 admin
用户来生成您的夹具。 createsuperuser
将负责散列您的密码。您应该会在密码字段中看到一个看起来很长的随机字符串。
我通过固定装置添加了超级用户:
python manage.py loaddata data.json
这是我的 data.json:
[
{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "admin",
"first_name": "admin",
"last_name": "admin",
"is_active": true,
"is_superuser": true,
"is_staff": true,
"groups": [],
"user_permissions": [],
"password": "admin",
"email": "admin@mail.com"
}
}
]
然后我尝试登录到管理员但出现错误:
"Please enter the correct username and password for a staff account. Note that both fields may be case-sensitive."
输出
dumpdata auth.user --indent 4 > output.json
给他们看
[
{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "admin",
"first_name": "admin",
"last_name": "admin",
"is_active": true,
"is_superuser": true,
"is_staff": true,
"last_login": "2017-09-17T13:01:51.009Z",
"groups": [],
"user_permissions": [],
"password": "admin",
"email": "admin@mail.com",
"date_joined": "2017-09-17T13:01:51.009Z"
}
}
]
我用的是django1.6和sqlite3
我哪里错了?
像所有行为良好的 Web 框架一样,Django stores passwords as hashes。哈希在设计上是单向的:您无法从存储的哈希中获取用户密码。
我怀疑 loaddata
只是将数据按原样插入到您的数据库中。 dumpdata
显示 "password": "admin"
的事实证实了这一点。您将无法以以这种方式创建的用户身份登录,因为没有密码会散列为 "admin"
.
最好的解决方案可能是通过 createsuperuser
、 然后 使用 dumpdata
使用您想要的密码创建一个 admin
用户来生成您的夹具。 createsuperuser
将负责散列您的密码。您应该会在密码字段中看到一个看起来很长的随机字符串。