用express在nodeJS中实现管理面板的最佳方法

时间:2019-09-01 01:31:50

标签: node.js express

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

1 个答案:

答案 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),我认为应该工作正常。

希望这会有所帮助:)