我目前正在开发一个处理多个用户的 Web 应用程序。虽然它目前有效,但它依赖于一些我将在稍后概述的真正糟糕的做法。
我们使用 MySQL 作为数据库系统,因为我们正在更新我们当前的应用程序,我们希望确保一切都是向后兼容的。否则我会看看 MongoDB 等。
我们的用户存储在一个恰当命名的表中login
。这包含他们的用户名、电子邮件、哈希密码等和一个包含他们偏好的 JSON 编码对象的字段。没有真正的理由这样做超过使用元表。
所以不好的做法:
- 我们将整个用户登录行存储在 cookie 中,不包括他们的密码(尽管这是一个仅限内部的应用程序)。它是 JSON 编码的。
- 一旦用户登录,我们就有一个安全的 HTTP cookie,只能通过 Node.js 读取他们的用户名和密码,以便我们可以继续保持用户自动登录。
- 我们有一条
app.get('*')
路线,可以不断确保用户拥有他们的三个 cookie,并acc
使用新的偏好更新他们的 cookie。这意味着每次用户切换页面或访问新的 AJAX 项目(都在相同的路由下)时,他们都有一个更新的 cookie。 - 每次用户执行操作时,我们都会这样做以获取他们的用户 ID:
JSON.parse(res.cookies.acc).agent_id
哎呀!
现在,每个用户都可以对页面上的某些元素执行操作,这会影响每个人,因为应用程序是内部的,任何人都可以处理其中的数据。
我知道我想要实现什么以及应该如何在 PHP 中完成,但我无法找出 Node.js 中最有效的方法。
我已经开始创建一个用户模块,它允许我们获取执行操作的用户并巧妙地更新他们的偏好等。你可以在这里看到这个,记住它是一个 WIP。我在使用该模块时遇到的问题是它无法访问用户 cookie,因为它不是 Express 的“一部分”。这解释了最后一个不好的做法。
处理这样一个系统并保持无不良行为的最佳方法是什么?