2016-05-09 16 views
6

Sto tentando di utilizzare il metodo di istanza di Sequelize per convalidare una password al tentativo di accesso. Ho definito il modello User come:Sequenza dei metodi di istanza non funzionanti

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; 
} 

Nel mio percorso di accesso faccio la seguente:

  • 1) Recuperare il nome utente & password dalla richiesta corpo
  • 2) Controllare se il nome utente esiste in database
  • 3) Se l'utente esiste, ottiene l'oggetto utente e confronta la password inviata con la password con hash nel database utilizzando il metodo validatePassword.

Ecco il codice relativo

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)); 
    } 
.... 

Ogni volta che cerco di login ricevo il seguente errore

[TypeError: user.validatePassword is not a function] 

Che cosa sto facendo di sbagliato?

+0

Sei sicuro 'user' non è nulla? –

+0

@Hopeful Llama nope posso *** console.log (utente) *** e recuperare tutte le informazioni –

risposta

5

Penso che si stia utilizzando in modo errato la definizione del modello sequelize. http://docs.sequelizejs.com/en/latest/docs/models-definition/#expansion-of-models

Questo è il modo corretto:

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

come questo:

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

Sì che l'ha risolto! Grazie!! –

Problemi correlati