Immer wenn eine Anfrage an das Backend gestellt wird, um einen Benutzer zu erhalten, erhalte ich diesen Benutzer mit dem Hash-Passwort zurück.

        {
            "_id": "5e4e3e7eecd9a53c185117d4",
            "username": "rick",
            "email": "rick@gmail.com",
            "password": "$2b$10$/eD8g4jCw6Bx0.FNxFDADO5tc70AvUmK0H/7R/0JTyo2q9PcGAdOO",
            "createdAt": "2020-02-20T08:08:30.878Z",
            "updatedAt": "2020-02-20T08:08:30.878Z",
            "__v": 0
        }

Benutzermodell

const userSchema = new Schema({
    username: { type: String, required: true },
    email: { type: String, required: true },
    password: { type: String, required: true },
    posts: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "Post"
    }]
}, { timestamps: true })

listUser route

    listUsers: (req, res) => {
        User.find{}, (err, users) => {
            if (err) {
                return res.status(500).json({ error: "Server error occurred" })
            } else if (!users) {
                return res.status(400).json({ error: "No users found" })
            } else if (users) {
                return res.status(200).json({ users: users })
            }
        })
    }

Gibt es eine Möglichkeit, das Antwortobjekt ohne das Kennwortfeld zurückzugewinnen, obwohl ich das Kennwortfeld im Benutzerschema deklariert habe? Ich habe die Option selected: false im Feld password im Benutzermodell ausprobiert. Es hat funktioniert, aber als ich mich nicht in meiner App anmelden konnte. Es muss einen anderen Weg geben.

0
hellraiser999 20 Feb. 2020 im 18:39

3 Antworten

Beste Antwort

Sie können das Feld entfernen, wenn Sie den Abfrageaufruf ausführen. Der folgende Code findet beispielsweise einen Benutzer basierend auf der ID und entfernt das Kennwortfeld. Als Benutzerschema hofft dies

let user = await User.findById(id).select("-password");
1
Abdullah Abid 20 Feb. 2020 im 15:54

Die folgende Operation findet Dokumente in der Sammlung user und gibt alle Felder zurück und schließt das Feld password aus.

hier mongodb link für weitere info.

let user = await User.find({},{password:0})

0
Mayur Vaghasiya 21 Feb. 2020 im 05:12

Sie könnten so etwas verwenden:

UserSchema.set('toJSON', { transform: function(doc, ret, options) { delete ret.password; return ret;} });

Dadurch haben Sie die Möglichkeit, ein Feld aus der Sammlung auszuschließen.

P.: Die 3 Parameter geben die Werte Ihres Schemas an. Sie können beim Erstellen des Schemas sogar den Parameter "Transformieren" eingeben.

0
VitDev 20 Feb. 2020 im 16:02