所以我有一个在Nodejs中开发的应用程序,并且正在使用Mongodb / Mongoose数据库。除了应用程序,还有一个管理面板,管理员可以管理从常规用户添加的所有数据。
我在以下用户架构中:
role: {
type: String,
default: "user",
enum: ["user", "admin"]
},
我的问题是,使用登录表单添加一个或两个管理员用户的最佳/安全方式是什么?
答案 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.js
或server.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
。