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

时间:2017-06-26 11:48:34

标签: node.js mongodb mongoose admin

所以我有一个在Nodejs中开发的应用程序,并且正在使用Mongodb / Mongoose数据库。除了应用程序,还有一个管理面板,管理员可以管理从常规用户添加的所有数据。

我在以下用户架构中

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

我的问题是,使用登录表单添加一个或两个管理员用户的最佳/安全方式是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用脚本(例如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建立连接后立即在seed.jsserver.js脚本中需要app.js。完成播种后注释或删除此行。

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

答案 1 :(得分:1)

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

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