2014-09-02 10 views
5

Próbuję usunąć hasło z modelu serializowanego JSON.Sails.js Model użytkownika nie usuwa hasła

Z jakiegoś powodu mój kontroler zwracający res.json({user: myUser}); zwraca pełnego użytkownika, w tym hasło. Poniżej znajduje się mój model użytkownika. Myśli?

# models/User.js 
var User = { 
    attributes: { 
    username: 'string', 
    password: 'string' 
    }, 

    // Override toJSON method to remove password from API 
    toJSON: function() { 
    var obj = this.toObject(); 
    // BELOW NOT WORKING 
    delete obj.password; 
    return obj; 
    } 
}; 
module.exports = User; 
+0

Pokaż, jak nazywasz swój model – mdunisch

Odpowiedz

18

możliwość dodawania toJSON jako metoda klasy (poza obiektem attributes); to musi być metoda Instancji:

# models/User.js 
var User = { 
    attributes: { 
    username: 'string', 
    password: 'string', 

    // Override toJSON method to remove password from API 
    toJSON: function() { 
     var obj = this.toObject(); 
     delete obj.password; 
     return obj; 
    } 

    } 

}; 
module.exports = User; 

Spowoduje to dodanie metody toJSON do każdej instancji User i będzie działać jak można się spodziewać, kiedy robisz takie rzeczy jak res.json().

+1

To jest rozwiązanie. –

+0

Dla odniesienia, oto informacje w dokumentach: https://github.com/balderdashy/waterline-docs/blob/master/models.md#toobjecttojson-instance-methods –

+0

Oto działający adres URL: https: // github .com/balderdashy/waterline-docs/blob/master/models/instance-class-methods.md # toobjecttojson – priyank

0

Jeśli ktoś z was spędził ostatnie 2 godziny na polowaniu ... jeśli używasz paszportów, nie zapomnij wyczyścić haseł i uzyskać dostęp do Tokenów (chyba, że ​​potrzebujesz ich w swojej aplikacji ...) Po prostu mam nadzieję, że pomoże to komuś zaoszczędzić czas.

var User = { 
    attributes: { 
    ... 
    toJSON: function() { 
     var obj = this.toObject(); 
     delete obj.password; 
     delete obj.accessToken; 
     if (obj.passports) { 
      for (var i = 0; i< obj.passports.length; i++) { 
       delete obj.passports[i].password; 
       delete obj.passports[i].accessToken; 
      } 
     } 
     return obj; 
    } 
} 
Powiązane problemy