feat: bootstrap admin from NAV_ADMIN_USERNAME and NAV_ADMIN_PASSWORD

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-05-12 15:44:14 +08:00
parent 6280480e48
commit 91814368af
2 changed files with 14 additions and 4 deletions
+5 -1
View File
@@ -1,9 +1,13 @@
# 复制本文件为 .env 后按需修改(.env 勿提交到 Git) # 复制本文件为 .env 后按需修改(.env 勿提交到 Git)
# 与 app.py 同目录;程序启动时自动加载。 # 与 app.py 同目录;程序启动时自动加载。
# 必填(长期运行):随机字符串,用于会话与 CSRF。可执行: openssl rand -hex 32 # 必填(长期运行):随机字符串,用于会话与 CSRF。生成见下方「密钥」说明。
# NAV_SECRET_KEY= # NAV_SECRET_KEY=
# 仅当数据库里还没有任何用户时生效(首次启动):首个管理员账号
# NAV_ADMIN_USERNAME=admin
# NAV_ADMIN_PASSWORD=请改成强密码
# 数据库(默认 SQLite 文件在当前工作目录) # 数据库(默认 SQLite 文件在当前工作目录)
# NAV_DATABASE_URL=sqlite:///nav_local.db # NAV_DATABASE_URL=sqlite:///nav_local.db
+9 -3
View File
@@ -254,12 +254,18 @@ def _group_choices():
def _ensure_default_user() -> None: def _ensure_default_user() -> None:
if User.query.count() > 0: if User.query.count() > 0:
return return
u = User(username="admin") username = (os.environ.get("NAV_ADMIN_USERNAME") or "admin").strip() or "admin"
u.set_password("admin123") password = os.environ.get("NAV_ADMIN_PASSWORD") or "admin123"
u = User(username=username)
u.set_password(password)
db.session.add(u) db.session.add(u)
db.session.add(ServiceGroup(name="默认分组", sort_order=0)) db.session.add(ServiceGroup(name="默认分组", sort_order=0))
db.session.commit() db.session.commit()
print("[nav] 首次运行:默认账号 admin 密码 admin123(仅内网使用,建议自行改库或删用户后重建)") print(
f"[nav] 首次运行:已创建管理员「{username}"
"(来自 NAV_ADMIN_USERNAME / NAV_ADMIN_PASSWORD,未设置则为 admin / admin123)。"
"生产环境请尽快改为强密码。"
)
app = create_app() app = create_app()