Vapor 3 GET маршрут для конфиденциальных данных - PullRequest
0 голосов
/ 05 ноября 2018

Используя многочисленные учебники по Vapor 3, я не смог понять, как я могу редактировать вывод JSON, например. чтобы получить конкретный объект User, я создаю маршрут:

protectedRouter.get("users", User.parameter, use: userController.user)

И метод в UserController:

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

И он, конечно, отправляет все, что внутри объекта User, включая электронную почту и хешированный пароль. Отлично. Как я могу избежать этого? Я хочу отправить только публичную информацию о пользователе (имя, ник, идентификатор и т. Д.).

1 Ответ

0 голосов
/ 05 ноября 2018

Создайте отдельную структуру, представляющую желаемую структуру вывода. Согласуйте эту структуру с Content. Всякий раз, когда вы возвращаете своего пользователя, сначала преобразуйте его в эту структуру. Добавление расширения для пользователя, которое делает это, удобно для удобства.

Распространенный шаблон заключается во вложении этой структуры в модель, называя ее открытой. то есть.,

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

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

Ваши маршруты будут возвращать User.Public вместо User. Обратите внимание, что этот шаблон также полезен в обратном порядке для создания отдельного «входного» представления для вашего пользователя.

Подробнее об этом можно прочитать в документации Vapor по адресу Vapor & rarr; Содержание & rarr; Динамические свойства .

...