Das untere :-

req.session.user = doc[0];
req.session.user.password = null;

Macht doc[0].password = null!

Was mache ich, um das zu verhindern?

Bearbeiten: Wo doc[0] = { name: 'sangram', e-mail: 'abc.in', password : 'pwd' }

0
Sangram Singh 26 Nov. 2013 im 13:17

3 Antworten

Beste Antwort

Die einzige Möglichkeit, dies zu tun, besteht darin, jede Eigenschaft eines Objekts zu kopieren:

req.session.user = {};
for (var key in user) {
  if (key !== 'password') req.session.user[key] = user[key];
}

Wenn user ein Mungo-Dokument ist, sollten Sie es wahrscheinlich zuerst in ein einfaches Objekt konvertieren:

req.session.user = {};
var json = user.toObject();
for (var key in json) {
  if (key !== 'password') req.session.user[key] = json[key];
}

Der einfachste Weg, um das zu tun, was Sie wollen, ist die Verwendung einer hilfreichen Bibliothek wie Unterstrich oder lodash:

req.session.user = _.omit(user.toObject(), 'password');
2
Leonid Beschastny 26 Nov. 2013 im 09:31

Für den einfachen Fall einfacher Objekte habe ich eine kleine Hilfsfunktion geschrieben:

function ShallowClone(obj) {
    var clone = {};
    for (var key in obj)
        clone[key] = obj[key];
    return clone;
}

Verwendung in Ihrem Fall:

req.session.user = ShallowClone(doc[0]);
req.session.user.password = null; //won't affect doc[0] password

Live-Testfall. (mit Dummy-Objekt)

2
Shadow Wizard is Ear For You 26 Nov. 2013 im 09:34

Sie können dies nicht verhindern. Die Eigenschaft user wird auf dieses Objekt doc[0] festgelegt. Später bearbeiten Sie die Eigenschaft .password dieses neu zugewiesenen Objekts. Wenn Sie password separat aufbewahren möchten, müssen Sie doc[0] einem anderen Objekt zuweisen.

req.session.user = {};
req.session.user.doc = doc[0];
req.session.user.password = null;

Hier ist eine Methode zum Klonen / Erweitern eines Objekts:

var extend = function() {   
    var process = function(destination, source) {   
        for (var key in source) {
            if (hasOwnProperty.call(source, key)) {
                destination[key] = source[key];
            }
        }
        return destination;
    };
    var result = arguments[0];
    for(var i=1; i<arguments.length; i++) {
        result = process(result, arguments[i]);
    }
    return result;
};

Und seine Verwendung:

var original = { value: "bla" };
var duplication = extend({}, original, { newProp: "test"});
0
Krasimir 26 Nov. 2013 im 10:50