首页 > 解决方案 > 敏感数据的 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 等...)。

标签: swiftvapor

解决方案


创建一个单独的结构来表示您所需的输出结构。将该结构符合Content. 每当您返回用户时,首先将其转换为该结构。为了方便起见,向 User 添加一个扩展是很好的。

出现的一种常见模式是将此结构嵌套在称为 Public 的模型中。IE,

extension User {
    struct Public: Content { ... }

    func makePublic() -> Public { ... }
}

然后,您的路线将返回User.Public而不是User. 请注意,此模式在反向方面也很有用,用于为您的用户创建单独的“输入”表示。

您可以在 Vapor 的文档Vapor → 内容 → 动态属性中阅读更多相关信息。


推荐阅读