MEAN堆栈上的登录系统架构?

Posted

技术标签:

【中文标题】MEAN堆栈上的登录系统架构?【英文标题】:Architecture for login system on MEAN stack? 【发布时间】:2013-10-11 16:38:34 【问题描述】:

我正在 MEAN 堆栈(MongoDB、Express、AngularJS 和 node.js)上开发一个 Web 应用程序。我正在开发一个登录系统,并且还将保护一些 Angular 路由,以便只有登录用户才能访问它们。我正在尝试考虑处理此架构的最佳方法。

我正在考虑当前的工作流程:

用户通过 AngularJS 表单登录,该表单将 http POST 发送到 Express 端点。端点根据数据库验证用户,并使用 OAuth 令牌和 cookie 进行响应。两者都存储在 mongo 数据库中以供以后验证。 一旦 AngularJS 收到登录响应,它会使用 ng-cookies 存储收到的 cookie,并将 OAuth 令牌存储在用户服务中。 现在每次 AngularJS 中的路由更改时,用户服务都会通过将其与 mongo 数据库中的 cookie 进行比较来确保 cookie 仍然合法(这将是使用 Angular 解析的 API 调用...造成明显的滞后?) 当用户点击“注销”或 cookie 过期时,cookie 和 OAuth 令牌都会从数据库中删除,不再有效。

这种方法有意义吗?它是否安全,执行起来是否相对高效/快速?

【问题讨论】:

有道理,你也可以利用会话,这样你就不会在每次更改路线时都检查数据库。 会话是否由 Express 管理?然后在路由更改时,我仍然会进行 API 调用,但不会检查数据库? 是的,req.session -- 查看这篇文章:***.com/questions/14218725/… -- 或者您可以查看 html5 sessionStorage 还有一篇更好的关于 Express 会话的博文:blog.modulus.io/nodejs-and-express-sessions 看看espeo.pl/2012/02/26/authentication-in-angularjs-application 【参考方案1】:

我最终将我的原始工作流程与 Express 的身份验证示例相结合,参见 here。如下:

当用户最初加载应用程序时,会对 Express 端点进行 http 调用,以检查用户是否已经存在会话。如果是这样,则用户存储在$rootScope 中并被视为已登录。 每当 AngularJS 路由发生变化时,都会访问同一个端点。路由保护以类似于here 描述的方式指定。如果端点返回不存在会话,则取消设置 $rootScope.user(如果需要),并将用户重定向到登录页面。 处理登录表单时,它会发布到 Express 端点。端点从 mongoDB 中检索用户(如果存在),并尝试对密码进行哈希处理。如果匹配,则设置用户会话,存储在 mongo DB 中,并且端点返回 user 对象(如前所述,用于存储在 $rootScope 中)。 任何其他端点被访问时,函数首先通过restrict 函数传递,该函数确保在向客户端发送任何数据之前存在会话。如果不存在会话,它会返回一个 401,然后在 Angular 端使用 this HTTP interceptor 处理以取消设置 $rootScope.user 并重定向到登录屏幕。 当用户在 Angular 端点击“注销”时,会话被取消设置并从 mongo DB 中删除,$rootScope.user 设置为 null,用户被重定向回首页。

【讨论】:

以上是关于MEAN堆栈上的登录系统架构?的主要内容,如果未能解决你的问题,请参考以下文章

亿级用户架构系统用户登录为啥很快

如何将 MEAN 堆栈部署到我的托管服务器?

mean.io 堆栈角长运行操作与 http 请求

如何使用适用于 iOS 的 swift 3 连接到 MEAN 堆栈 REST api

[PIM]-单点登录

用户登录系统数据库架构...请批评?