首页 > 解决方案 > 使用 express 在 nodeJS 中实现管理面板的最佳方法

问题描述

我正在用 nodeJS 和 express 制作一个博客应用程序。我想实现一个管理面板,我可以创建、删除、更新和编辑我的帖子,但我不知道如何将这些管理路由保密以及进行什么样的身份验证。我是在数据库上使用管理员密码仅使用一行(mongodb)进行收集,还是将管理员身份验证所需的密码保存在单独的文件中?这足够安全吗?我应该在代码的 if 语句中保留我想要的密码吗?我将是唯一使用此系统的人,但我想了解确保其安全的最佳方法。

标签: node.jsexpress

解决方案


我更喜欢分离请求模式并为它们定义单独的身份验证机制。例如...

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()为用户和管理员初始化块,如使用 定义所示basicAuthexpress我认为它应该可以正常工作。

希望这可以帮助 :)


推荐阅读