node.js - 使用 express 在 nodeJS 中实现管理面板的最佳方法
问题描述
我正在用 nodeJS 和 express 制作一个博客应用程序。我想实现一个管理面板,我可以创建、删除、更新和编辑我的帖子,但我不知道如何将这些管理路由保密以及进行什么样的身份验证。我是在数据库上使用管理员密码仅使用一行(mongodb)进行收集,还是将管理员身份验证所需的密码保存在单独的文件中?这足够安全吗?我应该在代码的 if 语句中保留我想要的密码吗?我将是唯一使用此系统的人,但我想了解确保其安全的最佳方法。
解决方案
我更喜欢分离请求模式并为它们定义单独的身份验证机制。例如...
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
我认为它应该可以正常工作。
希望这可以帮助 :)
推荐阅读
- powerbi - Power BI - 评估逻辑并突出显示小计(条件格式)
- javascript - 我得到了一个指数:10;从 vscode 的终端
- bash - 如何遵循哪个输出的符号链接?
- java - 在 Spark 的驱动程序上捕获 Dataset foreachPartition() 函数中引发的异常?
- c# - 如何等待元素附加到 DOM
- c# - 如何在 OpenXML SpeadsheetDocument 中设置或清除作者
- wordpress - 将 Bootstrap 4 网站迁移到 Wordpress
- javascript - React.js:父级或组件应该管理状态吗?
- php - 删除 var_dump 时 dateTime 出错
- jquery - 如何使用 jquery 从复杂的输入名称中获取值