在烧瓶中创建超级用户的最佳方法是什么

What is the best way to create a superuser in flask

我正在开发一个烧瓶应用程序,我需要使用超级用户创建不同类型的用户角色。创建超级用户的最佳方法是什么?我想到的一些方法是:

  1. 创建一个custom command并在生产中执行命令。

    import click
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.cli.command("create-superuser")
    @click.argument("name")
    def create_superuser(name):
        ...
    
  2. 创建函数并在第一个请求之前执行。

    @app.before_first_request
    def init_db():
        db.create_all()
        insert_superuser()
    
  3. 或者 sql 在数据库中插入一个超级用户。

如果我做错了或者这在生产中是一种不好的做法,请告诉我。我还是个新手。

这里有几个选项-

  1. 有一个用于添加用户的 CLI 命令,就像您正在做的那样。我发现大多数项目都走这条路,并且只要您可以 运行 在具有适当配置的系统上使用 CLI,它就可以很好地工作。一般来说,扩展 CLI 以包括密码重置之类的东西可能是有意义的。

  2. 有一个 "First run" 大多数情况下,应用程序会显示一个请求信息的表单。这就是 Github Enterprise 或 Wordpress 之类的东西的工作方式,但是存在一个小威胁,即知道您正在部署的用户可以抢先进入 Web 界面。这可以通过让第一个 运行 脚本记录一个带有安全令牌的 URL 来缓解,因此只有有权访问日志的人才能启动配置项目。如果您不向客户部署,虽然这比需要的要复杂。

  3. 根据环境变量创建用户。当您创建开发人员环境时,这条路线特别有用,因为这意味着开发人员在设置时不必 运行 通过额外的步骤。不过在生产中这样做是个坏主意。

希望对您有所帮助!

顺便说一下,很抱歉你标记了你的问题 flask_restful,我真的认为每个人都应该使用 flask_restplus(现在是 flask_restx,由于维护者的变化而分叉)。

我可以更改标签,但我想让你自己选择

这是您最满意的地方。没有最好的办法。这取决于您的用例。但是,我不喜欢第二种方法 (before_first_request)。

  1. 自定义命令

如果你想把这个任务交到一个人手里,你可以用这个。人们会来找某个人,在管理员方面添加或不添加他们。

  1. 您可以使用 @app.before_request() 装饰器,以便每次都执行该操作,但不要每次点亮应用程序时都设置数据库。使用数据库,它引导我们到第三个。

  2. 数据库中的超级用户(使用 sha256 散列的密码)。

通常情况下,如果系统处于生产状态,您不想过多地打扰管理员。

还有一个方法:The JWT token.