在 Node.js/MongoDB 应用程序中添加默认管理员用户的最佳方式是什么?

What's the best way to add a default admin user in Node.js/MongoDB app?

所以我有一个用 Nodejs 开发的应用程序,并且正在使用 Mongodb/Mongoose 数据库。在应用程序旁边有一个管理面板,管理员可以在其中管理普通用户添加的所有数据。

在用户模式中我有以下内容:

role: {
        type: String,
        default: "user",
        enum: ["user", "admin"]
    },

我的问题是 best/secure 添加一个或两个管理员用户可以使用登录表单登录的方法是什么?

您可以使用脚本,比如 seed.js,根据需要安全地插入尽可能多的具有管理员角色的用户。

//seed.js
var User = require('../path/to/user.js');

var user = {
    name: "Admin User",
    email: "admin@gmail.com",
    role: "admin"
}

User.create(user, function(e) {
    if (e) {
        throw e;
    }
});

连接到 mongodb 后,立即在 server.jsapp.js 脚本中要求 seed.js。完成播种后评论或删除此行。

require('../path/to/seed');

如果你想用密码设置管理员,你可以定义一个文件夹,其中包含一些部署文件(你显然不想使用你的 cvs 跟踪)并将用户添加到 JSON 文件:

mkdir .deploy
echo '.deploy' >> .gitignore
cd .deploy
touch users.json

并在那里添加用户配置:

{
  "users": [{
    name: "Admin User",
    username: "admin",
    email: "admin@gmail.com",
    role: "admin",
    password: "some-long-password"
  }]
}

然后在启动时的代码中检查项目的文件系统是否有 users.json 文件。如果存在,则创建新用户并删除,否则继续:

import fs from 'fs'

const User = require('../path/to/user.js');

const startup = () => {
  const path = '/path/to/users.json'
  fs.readFile(path, 'utf8', function (err, data) {
    if (err) return console.error(err)
    const usersConf = JSON.parse(data);
    usersConf.users.forEach(user => User.create(user))
    deleteUsers(path)
  })
}

const deleteUsers = (path) => {
  fs.unlink(path, (err) => {
    if (err) console.error(err)
  })
}

startup()

当然这也可以使用 async / await 来编写,以防止这些嵌套回调。

你应该写一个检查,如果用户存在并忽略用户,因为你可能会在下次部署和更新时再次提供users.json