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

2024-03-13

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

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

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

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


我最终将我的原始工作流程与 Express 的身份验证示例结合起来,看到了here https://github.com/visionmedia/express/blob/master/examples/auth/app.js。如下:

  • 当用户最初加载应用程序时,将对 Express 端点进行 http 调用,以检查用户是否已存在会话。如果是这样,用户将存储在$rootScope并视为已登录。
  • 每当 AngularJS 路由发生变化时,都会访问相同的端点。路由保护的指定方式与所描述的类似here http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app。如果端点返回不存在会话,$rootScope.user未设置(如果需要),并且用户将被重定向到登录页面。
  • 处理登录表单后,它会发布到 Express 端点。端点从 mongoDB(如果存在)检索用户,并尝试对密码进行哈希处理。如果匹配,则设置用户会话,并将其存储在 mongo DB 中,并且端点返回user对象(用于存储在 $rootScope 中,如前所述)。
  • 每当访问任何其他端点时,这些函数都会首先通过restrict在向客户端发送任何数据之前确保会话存在的功能。它返回一个401如果不存在会话,则在 Angular 端使用这个HTTP拦截器 https://github.com/witoldsz/angular-http-auth取消设置$rootScope.user并重定向到登录屏幕。
  • 当用户在 Angular 端单击“注销”时,会话将被取消设置并从 mongo DB 中删除,$rootScope.user设置为 null,用户将被重定向回首页。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MEAN 堆栈上的登录系统架构? 的相关文章

随机推荐

  • WPF DataGrid 网格线在另存为 PDF 时不可见

    我正在使用 DataGrid 来表示 WPF 应用程序中的一些数据 在我使用 PDFSharp 将具有 DataGrid 的特定 WPF 窗口保存到 PDF 的功能中 我遇到一个问题 即当以较小的查看百分比查看保存的 PDF 时 DataG
  • 我的 Rails 和 Cocoa 应用程序之间的 SHA1 哈希值不匹配

    我有一个 Cocoa 应用程序将一些数据以及该数据的 SHA1 哈希值发送到 Rails 应用程序 该应用程序验证数据和哈希值是否匹配 但它们不匹配 可以肯定的是 我已经记录了在 Rails 和 Cocoa 端散列到控制台的数据的十六进制版
  • 使用回溯的数独求解器

    我最近一直在研究回溯数独求解算法 目前我想问一下我应该如何将我的solve 方法从void更改为boolean 我正在使用一个非常简单的回溯算法 它目前工作正常 但我宁愿有一个布尔值而不是一个空值 因为有一个打印堆栈不是很好 Thanks
  • 如何截断C char*?

    就如此容易 顺便说一句 我正在使用 C 我已经阅读了 cplusplus com 的 cstdlib 库函数 但我找不到一个简单的函数 我知道字符的长度 我只需要erase最后三个字符 我可以使用 C 字符串 但这是用于处理文件 它使用 c
  • 计算一个字节中零和一的数量

    我之前发布了一个程序来查找一个字节中 1 的总数 现在我正在尝试查找一个字节中 0 的数量 以下是我的代码 MOV AL 1 MOV CX 08H MOV BX 0000H MOV DX 0000H Zero SHR AL 01H JZ e
  • 在 Android 中唤醒/睡眠时启动 Activity

    我想制作一个计时器 当 Android 设备被唤醒时开始计时 当 Android 设备设置为睡眠时停止计时 我什么也没找到 如何触发活动 通过唤醒 睡眠 我希望你能帮助我解决我的问题 我使用了像 timonvlad 所说的 Broadcas
  • C# 中的分段下载?

    请原谅我对这个问题的无知 我想用 C 编写一个应用程序 可以以相同的方式从服务器下载文件打倒他们 http www downthemall net 做 DownThemAll 似乎打开了四个到 HTTP 服务器的连接来下载同一文件 我只是想
  • 从 std::tuple 函数 QtConcurrentRun 获取(多)返回值

    您好 我有一个用于在 Qt 中生成某个文件的 MD5 的类 我使用元组从中返回多个值 我想在其他线程上运行它 因为生成所有文件 MD5 可能需要一些时间并且它的冻结 gui我决定使用Qt并发运行在其他线程上运行它 但到目前为止我对如何获取所
  • 捕获代号一中的未知主机异常

    我正在使用构建一个应用程序代号一 http www codenameone com 问题是 我需要使用该应用程序访问 URL 该 URL 返回了我在屏幕上显示的一些结果 所以我用这些行来做到这一点 ConnectionRequest c n
  • Spark 执行器无法访问 kubernetes 集群内的 ignite 节点

    我正在将我的 Spark 作业与现有的 ignite 集群连接起来 我使用服务帐户名spark为了它 我的驱动程序能够访问 ignite pod 但我的执行程序无法访问它 这就是执行程序日志的样子 Caused by java io IOE
  • mongodb count 与 find with count [重复]

    这个问题在这里已经有答案了 我正在对 mongo 版本 2 4 和 3 2 集合中的文档进行计数 馆藏非常大 有3821085篇文档 我需要统计所有文件并附上参考资料 id 我尝试了两种不同的查询 db SampleCollection f
  • 安装 .apk 时,如何将 .apk 中的某些文件解压到 /data/data/ 文件夹?

    我的 Android 应用程序需要另一个 NATIVE 应用程序可执行文件在 Android 应用程序之前运行 以便它们可以通过套接字进行通信 Android 应用程序有一个 JNI 层来处理客户端通信 现在我需要将本机可执行文件与 apk
  • Haskell 的“尾部”函数的时间复杂度是多少?

    当我在阅读 Haskell 教程时 我心里想 Haskell 的时间复杂度是多少tail功能有 以及为什么 我在任何文档中都找不到答案 我猜想对于一个大小为 n 的列表 tail函数将是O n 即将尾部复制到一个新列表并返回该列表 但话又说
  • AndEngine GLES2 中未找到 SimpleLevelLoader 类

    我是 AndEngine 的新手 工作时从AndEngine 教程 http www matim dev com full game tutorial part 11 html 未找到以下类 我尝试从 AndEngine 导入所有库 但仍然
  • 将 DataTable 转换为 JSON,每行包含键

    我认为以下将是一项非常常见的任务 并假设会有一个简单的解决方案 但我找不到 如果我有以下结构的数据表 ID Name Active ID1 John TRUE ID2 Bill FALSE 我想将其序列化为 JSON 对象 其中 ID 列是
  • 如何将浮点数数组转换为 byte[] 并返回?

    我有一个浮点数组需要转换为字节数组并返回浮点 任何人都可以帮助我正确地执行此操作吗 我正在使用 bitConverter 类 发现自己在尝试附加结果时陷入困境 我这样做的原因是为了可以将运行时值保存到 IO 流中 如果重要的话 目标存储是
  • jQuery noConflict() 问题

    因此 我正在一个每次加载页面时都会注入 jQuery 1 2 6 的平台上进行开发 我开发的页面使用 jQuery 1 4 2 因此当我的页面加载时 我的页面上有 2 个 jQuery 实例 为了避免任何冲突 我在页面外部的 JS 文件中包
  • 当 WHERE 子句中只有单个列时,SQL Server 是否会使用复合索引?

    假设我有一张桌子 CREATE TABLE Users Id INT IDENTITY 1 1 FirstName VARCHAR 40 LastName VARCHAR 40 查询通常是开启的名 or LastName 而且还关于名 an
  • Angular 8 - 服务注入和工厂模式

    我已经简要阅读了几篇文章和官方 Angular 指南 但它们似乎无法帮助我解决我的任务 这就是我想要的和所做的 假设我有带有产品列表页面的 Angular 应用程序 此外 这个应用程序将来还会有类别列表页面和一些N列表页面 正如您所看到的
  • MEAN 堆栈上的登录系统架构?

    我正在 MEAN 堆栈 MongoDB Express AngularJS 和 node js 上开发一个 Web 应用程序 我正在开发一个登录系统 并且还将保护一些 Angular 路由 以便只有登录的用户才能访问它们 我正在尝试思考实现