swift - 敏感数据的 Vapor 3 GET 路由
问题描述
在 Vapor 3 上使用大量教程时,我无法弄清楚如何编辑输出 JSON,fe 以获取我创建路由的特定用户对象:
protectedRouter.get("users", User.parameter, use: userController.user)
和方法UserController
:
func user(_ req: Request) throws -> Future<User> {
return try req.parameters.next(User.self)
}
当然,它会发送 User 对象内的所有内容,包括电子邮件和散列密码。伟大的。我怎样才能避免这种情况?我的意思是我只想发送有关用户的公共信息(姓名、昵称、id 等...)。
解决方案
创建一个单独的结构来表示您所需的输出结构。将该结构符合Content
. 每当您返回用户时,首先将其转换为该结构。为了方便起见,向 User 添加一个扩展是很好的。
出现的一种常见模式是将此结构嵌套在称为 Public 的模型中。IE,
extension User {
struct Public: Content { ... }
func makePublic() -> Public { ... }
}
然后,您的路线将返回User.Public
而不是User
. 请注意,此模式在反向方面也很有用,用于为您的用户创建单独的“输入”表示。
您可以在 Vapor 的文档Vapor → 内容 → 动态属性中阅读更多相关信息。
推荐阅读
- python - Python SQLAlchemy pyodbc.Error: ('HY000', '驱动程序没有提供错误!')
- api - 币安“事件时间”与“交易时间”
- sql - 使用具有相同数据的列连接两个不同的 sql 表
- linux - 在 ubuntu 中使用单声道运行电子表格应用程序
- r - 提取非标准字符串的正则表达式
- c - 带有C宏的“可重置”循环DSL?
- javascript - 我如何为查询 mysql 创建简单的条件?
- javascript - 我可以在反应“渲染”语句中分配变量吗
- android - 如何在布局中正确放置按钮 - android
- reporting-services - 在数据集表达式中使用 Lookup() 时出错