【问题标题】:best way to implement an admin panel in nodeJS with express使用 express 在 nodeJS 中实现管理面板的最佳方法
【发布时间】:2019-09-01 19:02:25
【问题描述】:

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

【问题讨论】:

    标签: node.js express


    【解决方案1】:

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

    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() 块,如使用 express 定义 basicAuth 所示,我认为它应该可以正常工作。

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多