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

ari*_*ari 8 admin mongoose mongodb node.js

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

在用户架构中,我有以下内容:

role: {
        type: String,
        default: "user",
        enum: ["user", "admin"]
    },
Run Code Online (Sandbox Code Playgroud)

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

Tal*_*wan 5

您可以使用脚本(例如 )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;
    }
});
Run Code Online (Sandbox Code Playgroud)

在连接到 mongodb 后立即seed.js在您的server.js或脚本中添加 Require 。app.js完成播种后,注释或删除此行。

require('../path/to/seed');
Run Code Online (Sandbox Code Playgroud)


Jan*_*nkt 5

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

mkdir .deploy
echo '.deploy' >> .gitignore
cd .deploy
touch users.json
Run Code Online (Sandbox Code Playgroud)

并在那里添加用户配置:

mkdir .deploy
echo '.deploy' >> .gitignore
cd .deploy
touch users.json
Run Code Online (Sandbox Code Playgroud)

然后在启动时的代码中,检查项目的文件系统中的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()
Run Code Online (Sandbox Code Playgroud)

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

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