用于敏感数据的Vapor 3 GET路由

m8l*_*abs 3 swift vapor

在Vapor 3上使用了大量的教程,我没有弄清楚如何编辑输出JSON,以获得特定的用户对象我创建路径:

protectedRouter.get("users", User.parameter, use: userController.user)
Run Code Online (Sandbox Code Playgroud)

方法在UserController:

func user(_ req: Request) throws -> Future<User> {
    return try req.parameters.next(User.self)
}
Run Code Online (Sandbox Code Playgroud)

当然,它会发送User对象内的所有内容,包括电子邮件和散列密码.大.我怎么能避免这个?我的意思是我只想发送有关用户的公共信息(姓名,昵称,身份证等).

tan*_*101 8

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

一种常见的模式是将此结构嵌套在模型中,将其称为Public.即

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

    func makePublic() -> Public { ... }
}
Run Code Online (Sandbox Code Playgroud)

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

您可以在Vapor的文档中了解更多相关信息,包括Vapor→内容→动态属性.