无法使用Django登录到命令行创建的超级用户,但帐户已创建

问题描述

我已经使用docker-compose.yml命令创建了我无法登录的超级用户

sh -c "sleep 5 &&
#<snip>
 echo A-fj... create superuser acct... &&
 echo DJANGO_SUPERUSER_PASSWORD=$DJANGO_SUPERUSER_PASSWORD &&
 echo DJANGO_SUPERUSER_EMAIL=$DJANGO_SUPERUSER_EMAIL &&
 echo DJANGO_SUPERUSER_USERNAME=$DJANGO_SUPERUSER_USERNAME && 
 python manage.py createsuperuser --noinput --username $DJANGO_SUPERUSER_USERNAME  --email $DJANGO_SUPERUSER_EMAIL &&
 echo Z-fj... create superuser acct... done. &&
#<snip>
sleep 5 "

环境变量显示完美,并且创建了一个帐户,我可以使用dBeaver在数据库中看到该帐户。

当我通过“ $ python manage.py createsuperuser”对话框手动添加第二个用户时,我最终获得了一个可以登录的帐户。

当我将密码从User2复制到User1时,我可以使用User2密码登录到User1,所以这似乎是密码。

当我比较User1(原始用户)和User2(新用户)的密码时,它们看起来是不同的格式...

我不确定,但是认为这可能是问题的线索... 密码1较短,并且没有密码2较长的部分...

密码1:

!GSU8f8hmNOl1oJBfe1Epk7ocJiXXWQQp3G0mh9TC

密码2: pbkdf2_sha256 $ 120000 $ IAkHkB3ME9aB $ p0hrZPkLeSWK0IafqVQ1dEtR5kgBol7WnU7QELoo6KE =

为了防止万一,但我尝试了几种不同的密码

Screenshot comparing 2 passwords in dBeaver

解决方法

您应在非交互模式下设置DJANGO_SUPERUSER_PASSWORD环境变量,否则将不会设置密码(在这种情况下,Django密码将设置为不可用的字符串)

documentation的状态

在非交互模式下,USERNAME_FIELD和必填字段 (列在REQUIRED_FIELDS中)回退到 DJANGO_SUPERUSER_ 环境变量,除非 它们被命令行参数覆盖。例如, 提供一个电子邮件字段,您可以使用DJANGO_SUPERUSER_EMAIL环境 变量。

,

您是否正在尝试使用看起来像这样的行设置环境变量

...
echo DJANGO_SUPERUSER_PASSWORD=$DJANGO_SUPERUSER_PASSWORD
...

因为我认为这只是在回显该字符串,这就是为什么不用密码创建超级用户的原因。

如果您不确定在调用createsuperuser之前是否已设置变量,请在该命令之前转储环境变量。

尝试删除回声。

,

不,回声只是回声。 就在那里进行故障排除