我正在用nodeJS和express制作博客应用程序。我想实现一个管理面板,可以创建,删除,更新和编辑我的帖子,但是我不知道如何使这些管理路由保密以及进行哪种身份验证。我是否仅用一行(mongodb)用管理员密码在数据库上进行收集,还是将我用于管理员身份验证的密码保留在单独的文件中?这足够安全吗?我应该只在代码的if语句上保留我想要的密码吗?我将是唯一使用此系统的人,但我想了解确保其安全的最佳方法。
答案 0 :(得分:0)
我更喜欢分离请求模式并为它们定义单独的身份验证机制。例如...
const express = require('express');
const app = express();
const basicAuth = require('express-basic-auth');
app.use('/web/*', basicAuth({
users: authKeys
}));
app.use('/restrict/*', basicAuth({
users: adminAuthKeys
}));
...通过/web/*
访问我的站点的任何普通用户与将通过/restrict/*
访问该站点的管理员定义的身份验证是分开的。 authKeys
包含用户身份验证密钥,adminAuthKeys
包含管理员身份验证密钥。然后,我可以根据需要为其定义路由。例如...
// For user
app.get('/web/profile', (req, res) => {
...
...
});
// For user
app.get('/web/post/:id', (req, res) => {
...
...
});
// For admin
app.get('/restrict/stats', (req, res) => {
...
...
});
// For admin
app.get('/restrict/dashboard', (req, res) => {
...
...
});
在这里,我用express-basic-auth
显示了示例,您可以尝试使用最适合您的身份验证机制。通常,我们不会在将要提交到存储库中的文件中存储密码。最好将密码存储在安全的数据库中,并使用正确的编码。对于此express-basic-auth
示例,如果您可以初始化架构的JSON对象...
const authKeys = {
"some-user-name": "some-password",
"another-user-name": "another-password",
...
...
}
const adminAuthKeys = {
"some-admin-name": "some-password",
"another-admin-name": "another-password",
...
...
}
...通过在应用程序启动期间从存储中获取数据,然后为用户和管理员初始化app.use()
块(如图所示,用basicAuth
定义express
),我认为应该工作正常。
希望这会有所帮助:)