node.js - 开发阶段的Nestjs应用结构
问题描述
一些上下文
我正在为学校做我的第一个nestjs项目。我在项目的后端工作。总而言之,它是一款在线游戏,用户可以在其中玩游戏和聊天、设置帐户信息、在列表中添加朋友、查看排行榜等......
登录它的唯一方法是通过学校的 OAuth。用户无法使用电子邮件/密码登录。
问题
所以在开始开发第一条路线时:身份验证,帐户信息检索,注销,朋友列表等......我面临一个测试功能的问题。 我在学校的 OAuth 中只有一个帐户,因此我无法测试添加朋友之类的许多事情,因为它需要数据库中存在其他帐户。
我幼稚的做法
我制作了“调试路线”来添加/删除/更新用户批次,因此我可以请求使用(许多)假帐户填充和修改我的数据库。
我做了一个“调试卫士”,它禁止在开发模式之外访问这些路由(因为一切都在 docker 容器内运行,它依赖于环境变量)
当然,用于开发阶段的数据库与用于生产的数据库不同:用于开发/测试的 sqlite 和用于生产的 postgresql。
我的问题
您将如何针对这些功能构建您的应用程序?
我可能需要在整个开发阶段管理这些虚假帐户,在现实生活中的应用程序中,即使在部署之后我也可能不会摆脱这些路线,因为未来的发展需要它们。
- 你会在他们自己的控制器中分离这些开发功能/路线吗?模块 ?服务 ?
- 或保留它们的相关功能(
add_user_batch
例如在用户服务中) - 安全方面,警卫够用吗?这些路由真的很危险,因为访问它们会使所有帐户都处于危险之中,但它们在应用程序开发的整个生命周期中都很有用。
非常感谢您对此的看法。
解决方案
我会为新用户实现自己的身份验证保护,保留学校的 OAuth 帐户仅用于管理操作(因此该用户基本上可以访问所有应用程序路由),同时提供允许新用户注册应用程序的公共路由。该端点会将用户连同提供的访问凭据一起注册到数据库(记住在保存到数据库之前对密码进行哈希处理)。然后我会有两个登录端点:
- 一个用于 OAuth 登录
- 一个用于签署 JWT 并将其返回给调用者的用户登录
(或者您也可以拥有一个并找到一种方法来了解请求访问的用户是否是管理员,由您决定)
然后我会开发两个守卫:
- 一个用于 OAuth 访问
- 一个用于 JWT 一个
并将 JWT 守卫仅放在非管理路由上。
在这里,您可以找到有关 Nestjs 服务器上 JWT 身份验证的文档。
推荐阅读
- android - 删除时如何修复“用户无权访问此对象”错误
- javascript - 等待后未触发诗乃间谍 - 为什么?【Vue单元测试】
- java - 创建领域对象的问题(IllegalStateException:无法在写入事务之外修改托管对象)
- database - MongoDB - 如何处理数十万个并发连接?
- python - 如何使用熊猫列表在特定列上搜索字符串匹配?
- node-config - 无法在 Window 中使用 node-config 获取环境变量(自我回答)
- javascript - 如何修复 foreach forEach 不是函数
- python - 图形工具欧拉电路
- python - IntEnum 返回 AttributeError:无法设置属性
- reactjs - 如何强制总是设置类型的“迂腐”之类的错误?