【问题标题】:Autocreate superuser with each schema django使用每个模式 django 自动创建超级用户
【发布时间】:2016-10-27 10:27:01
【问题描述】:

我正在使用 django-tenant-schema(和 postgresql)开发一个多租户应用程序。现在,一旦创建了新模式,我就使用 call_command 创建超级用户。我还想到了使用信号 post_migrate 的选项。

我的疑问是如何在不输入 shell 密码的情况下自动创建超级用户。 用例是一旦用户注册他/她的模式,就会生成一个超级用户,用户使用超级用户的用户名和密码登录,之后可以更改密码。

我正在使用以下命令来调用 createsuperuser 命令:

call_command('createsuperuser', schema_name=self.schema_name, username='admin', email='admin@admin.com')

解决该问题的一种方法是更改​​ Django 的 createsuperuser.py 文件并自动提供密码,但这不是可接受的方法,即为某些用例更改源代码。请问我可以要求一些更好的方法

【问题讨论】:

    标签: django postgresql django-models database-schema superuser


    【解决方案1】:

    您可以为新超级用户“准备”密码并将 md5 值传递给 bash:

    a=# select md5('some password'||'test');;
                   md5
    ----------------------------------
     d5b3eb515b64edf295b2ee9062946d24
    (1 row)
    
    a=# create user test superuser password 'md5d5b3eb515b64edf295b2ee9062946d24';
    CREATE ROLE
    

    所以你可以在 bash 中使用d5b3eb515b64edf295b2ee9062946d24,将密码保存在其他地方?..

    【讨论】:

    • U c,我的问题不在于安全性,因为用户必须在继续之前更改密码。但我的问题是如何将值传递给 django,而不是通过 bash,而是通过代码自动传递给 django。即使是没有密码的超级用户也可以,所以第一次使用用户必须提供密码
    • 对不起,如果我不清楚。我的问题是如何自动将此密码发送给 Django,即当用户注册时,call_command 调用 createsuperuser,但这是在命令行中要求输入密码。我希望自动发送密码,即不是通过命令行而是通过一些编程/代码
    • 对不起 - 我对 django 不友好 :) 你为什么不自己生成密码?然后您就知道了,无需将其发送到任何地方-您在创建用户之前将其保存在代码中...
    • 我可以通过将 django createsuperuser.py 文件更改为密码字段中的存储字符串来解决此问题。但这不是一个可接受的解决方案。我不应该为某些用例更改 django 的源代码,然后为将来可能出现的其他用例搞砸。
    • 好吧,你,我正在计划一个库存应用程序,所以用户注册了他/她的公司,他是超级用户。他们只能在特定模式中为其公司创建更多子用户(员工等)。我无法手动为用户创建密码,必须有一种方法可以使用代码来完成!
    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 2018-04-01
    • 2021-10-13
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2012-12-13
    • 2021-11-16
    相关资源
    最近更新 更多