无法使用通过固定装置加载的超级用户登录到 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 将负责散列您的密码。您应该会在密码字段中看到一个看起来很长的随机字符串。