在 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.js
或 app.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
。
所以我有一个用 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.js
或 app.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
。