【问题标题】:How would I handle an Admin on a node.js blog?我将如何处理 node.js 博客上的管理员?
【发布时间】:2020-06-09 15:09:19
【问题描述】:

我是使用 express 和 mongoose 进行后端开发的初学者。

我正在创建一个只有一个管理员可以编辑、创建、删除帖子的博客。我将如何处理管理员?仅为管理员创建一个猫鼬模型是否有意义,或者我可以将他的密码和用户名放在 .env 文件中,然后在登录路径中进行比较?

.env 文件在生产期间是否安全?客户端可以通过浏览器访问 process.env 吗?

jsonwebtokens 是否足以进行身份​​验证,还是应该使用 passport.js?

【问题讨论】:

    标签: node.js express authorization admin production-environment


    【解决方案1】:

    如果您的博客仅供您使用,您当然可以使用env 文件来存储您的帐户和密码。

    但是,如果您要制作“普通”应用程序,您应该在数据库中创建一个用户表并使用身份验证机制来保证您的数据安全。

    此外,jwt通常用于对RESTful接口进行认证,但也有很多其他的认证方式,如sessionid和oauth,请根据需要选择合适的认证方式。

    【讨论】:

    • 该博客仅供一位用户使用。因此,当站点在生产模式下运行时,在 .env 文件中包含敏感信息是非常好的/安全的吗?对于 1 用户网站,这是否通常是这样做的?
    • 如果您的服务器设置了正确的入站/出站策略、ssh 安全策略,并且 env 文件没有公开(例如 nginx 的静态文件服务),那么它在大多数情况下是安全的案例。虽然这不是最佳做法,但对于单用户系统来说已经足够了。
    • 本质上,数据库只是一些带有额外身份验证的文件。安全的前提是“你的服务器是安全的”,没有这个前提,你的用户信息如何存储就没有任何区别。
    【解决方案2】:

    实现 admin 非常简单;如果您已经有普通用户的架构,只需添加一个指定他们是否是管理员的字段:

    const userSchema = new mongoose.Schema({
        username:{
            type: String,
            ...
        },
        password:{
            type: String,
            ...
        },
        role: {
            type: String,
            default: 'user',
            enum: ['admin', 'user']
        }
    })
    

    然后,对于只有管理员才能执行的所有受保护路由(如编辑、创建等),在其前面放置一个中间件函数来检查用户的角色字段。

        const restricted = (req, res, next) => { 
            if (user.role !== 'admin') { // assuming you pass user info
                return res.status(403).json({
                    status: 'fail',
                    message: 'Unauthorized to access this route'
                })
            }
            next()
        }
    

    【讨论】:

    • 那么每个人都可以通过填写{ role : admin }变成admin..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多