敏感数据的 Vapor 3 GET 路由
Vapor 3 GET route for sensitive data
使用大量关于 Vapor 3 的教程,我未能弄清楚如何编辑输出 JSON、f.e。为了获得特定的用户对象,我创建了路由:
protectedRouter.get("users", User.parameter, use: userController.user)
和UserController
中的方法:
func user(_ req: Request) throws -> Future<User> {
return try req.parameters.next(User.self)
}
当然,它会发送用户对象内的所有内容,包括电子邮件和散列密码。伟大的。我怎样才能避免这种情况?我的意思是我只想发送 public 有关用户的信息(姓名、昵称、身份证等...)。
创建一个单独的结构来表示您想要的输出结构。使该结构符合 Content
。每当您 return 您的用户时,首先将其转换为该结构。为用户添加一个扩展来执行此操作非常方便。
出现的一种常见模式是将此结构嵌套在调用它的模型中 Public。即,
extension User {
struct Public: Content { ... }
func makePublic() -> Public { ... }
}
您的路线将 return User.Public
而不是 User
。请注意,此模式在反向也很有用,可为您的用户创建单独的 "input" 表示。
您可以在 Vapor → Content → Dynamic Properties 的 Vapor 文档中阅读更多相关信息。
使用大量关于 Vapor 3 的教程,我未能弄清楚如何编辑输出 JSON、f.e。为了获得特定的用户对象,我创建了路由:
protectedRouter.get("users", User.parameter, use: userController.user)
和UserController
中的方法:
func user(_ req: Request) throws -> Future<User> {
return try req.parameters.next(User.self)
}
当然,它会发送用户对象内的所有内容,包括电子邮件和散列密码。伟大的。我怎样才能避免这种情况?我的意思是我只想发送 public 有关用户的信息(姓名、昵称、身份证等...)。
创建一个单独的结构来表示您想要的输出结构。使该结构符合 Content
。每当您 return 您的用户时,首先将其转换为该结构。为用户添加一个扩展来执行此操作非常方便。
出现的一种常见模式是将此结构嵌套在调用它的模型中 Public。即,
extension User {
struct Public: Content { ... }
func makePublic() -> Public { ... }
}
您的路线将 return User.Public
而不是 User
。请注意,此模式在反向也很有用,可为您的用户创建单独的 "input" 表示。
您可以在 Vapor → Content → Dynamic Properties 的 Vapor 文档中阅读更多相关信息。