Cacher des field de reponse Json

Bonjour la team !

J arrive à renvoyer mon Array d utilisateur en json mais…avec les password hasher :joy: Comment puis-je masquer des champs s’il vous plait ?

Salut @Nono92
Tu as un peu de code à nous montrer côté Vapor ?
L’idée serait de ne transmettre que les champs dont tu as besoin.

Merci @alexandre.cane

Tu as un peu de code à nous montrer côté Vapor ?

oui biensur :

Je souhaite renvoyer tout sauf l’ID et le password :stuck_out_tongue:

Une solution consiste à ne faire le User.query() que sur les champs dont tu as besoin :

https://docs.vapor.codes/4.0/fluent/query/#field

Sinon au même endroit dans ta fonction all()
Avant de return le User tu modifie les champs de ton object :

let user = User.query(on: req).all();
user.passwordHash = « ****** »;
return user;

Il y a peu être moyen de unset user.passwordHash. Je ne fais plus de dev en Swift donc à prendre avec des pincettes mais je pense que ça peut t’aider.

1 « J'aime »

@alexandre.cane t’es un chef ! je vais tester de suite !

Edit :
Voici la solution !
(ponctuelle car ça ne gere qu un seul champs) Je continue d’investiguer !

On dois passer en parametre du All les champs voulus !

1 « J'aime »

Non ça ressemble plutôt à :

User.query(on: req)
    .field(\.$name)
    .field(\.$email)
    .all()

J ai le droit a cette erreur avec ce code :confused:

let user = User.query(on: req)
    .field(\.$name)
    .field(\.$email)
    .all()

if let name = user.$name.value {
    // Name was fetched.
} else {
    // Name was not fetched.
    // Accessing `user.name` will fail.
}

Si tu lis la doc ils expliquent que tous les champs de User non sélectionnés au cours d’une requête seront dans un état non initialisé. Tenter d’accéder directement aux champs non initialisés entraînera une erreur fatale. Pour vérifier si la valeur de champ d’un modèle est définie, utilisez la propriété value $nomDuChamp
Voir exemple au dessus

1 « J'aime »

Merci ! j’avais lu mais pas compris sur la doc :slight_smile:

edit : Je ne comprend pas comment utiliser le if enfaite :thinking:

Un peu compliqué de tout expliquer et @mbritto le ferait mieux que moi.
Mais pour avancer vers la solution essayer de rendre var passwordHash optionnel dans ta class User et attention il faut sûrement modifier un peu le paramètre passwordHash de la fonction init un peu à la façon de id.

Encore une fois je n’ai pas fait de Swift depuis presque 4 ans.