2016-05-09 12 views
6

Ich versuche die Sequelize-Instanzmethode zu verwenden, um ein Passwort beim Anmeldeversuch zu validieren. ich die User-Modell definiert haben:Sequelize-Instanzmethoden funktionieren nicht

var User = sequelize.define('User',{ 
    id:{ 
      type:DataTypes.BIGINT, 
      autoIncrement: true, 
      allowNull: false, 
      primaryKey:true 
     }, 
    username:{ 
      type:DataTypes.STRING, 
      unique:true 
     }, 
    password:{ 
      type: DataTypes.STRING 
     }, 
    ... 
    }, 
    { 
    classMethods:{ 
     associate:function(models){ 
     ... 
     } 
     } 
    }, 
    { 
    instanceMethods:{ 
     validatePassword:function(password){ 
      return bcrypt.compareSync(password, this.password); 
     } 
     } 
    } 
); 
    return User; 
} 

In Anmeldungs ​​Route kann ich folgendes:

  • 1) Abrufen von Benutzernamen & Passwort von der Anfrage Körper
  • 2) Überprüfen Sie, ob Benutzername existiert in Datenbank
  • 3) Wenn Benutzer vorhanden ist, erhalten Sie ein Benutzerobjekt und vergleichen Sie das gesendete Kennwort mit dem Hash-Kennwort in der Datenbank mit der validatePassword-Methode. Hier

ist der entsprechende Code

var username = req.body.username || ""; 
var password = req.body.password || ""; 
models.User.findOne({ where: {username: username} }). 
then(
    function(user) { 
    if(user){ 
     console.log(user.validatePassword(password)); 
    } 
.... 

Jedes Mal, wenn ich versuche ich, um sich einzuloggen die folgende Fehler

[TypeError: user.validatePassword is not a function] 

Was mache ich falsch?

+0

Sind Sie sicher, dass 'user' ist nicht null? –

+0

@Hopeful Lama Nö kann ich *** console.log (Benutzer) *** und alle Informationen abrufen –

Antwort

5

Ich denke, Sie verwenden die Sequelize-Modelldefinition api falsch. http://docs.sequelizejs.com/en/latest/docs/models-definition/#expansion-of-models

Dies ist der richtige Weg:

var User = sequelize.define('User',{}, { 
    classMethods: { 
    method1: ... 
    }, 
    instanceMethods: { 
    method2: ... 
    } 
}); 

das nicht mag:

var User = sequelize.define('User',{}, { 
    classMethods: { 
    method1: ... 
    } 
},{ 
    instanceMethods: { 
    method2: ... 
    } 
}); 
+0

Ja, das hat es behoben! Vielen Dank!! –