2015-08-25 10 views
9

Sto seguendo il documento passport.js per creare un LocalStrategy utilizzando Sequelize come ORM per il mio database postgres. Tuttavia, durante l'autenticazione, facendo User.findOne(...).success(function(user){...]}); nel mio modulo login.js restituisce undefined. Che cosa sto facendo di sbagliato?Sequelize - findOne(). Success() non è definito

user.js:

var pg = require('pg'); 
var Sequelize = require('sequelize'); 

var sequelize = new Sequelize('database', 'username', 'password', { 
    host: 'localhost', 
    port: 5432, 
    dialect: 'postgres' 
}); 

var User = sequelize.define('users', { 
    username: Sequelize.STRING, 
    password: Sequelize.STRING 

}); 

User.sync(); 

module.exports = User; 

miei login.js (router)

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 


passport.serializeUser(function(user, done){ 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done){ 
    console.log(id) 
    User.findById(id, function(err, user){ 
     done(err, user); 
    }); 
}); 

passport.use(new LocalStrategy(
    function(username, password, done){ 
     var User = require('../models/user'); 
     User.find({where:{username: username, password: password}}).success(function(user){ 
      if(!user) { 
       return done(null, false, {message: 'Nom d\'usager incorrect.' }); 
      } 
      if (!user.validPassword(password)) { 
       return done(null, false, { message: 'Mot de passe incorrect.' }); 
      } 
      return done(null, user); 
     }); 
    } 
)); 

router.post('/login', passport.authenticate('local', { successRedirect: '/decoupage', 
                 failureRedirect: '/login', 
                 failureFlash: true }) 
); 


module.exports = router; 
+0

dovrete accettare il @robertklep risposta wich è corretta. –

risposta

17

Sequelize utilizza una versione modificata della libreria bluebird promessa, che non ha una funzione .success().

Utilizzare invece .then() (che segue anche lo standard Promises/A+):

User.find(options).then(
    function(user) { ... }, 
    function(err) { ... } 
); 
+0

cosa dovremmo usare per intercettare l'errore? – abhishek

+2

@abhishek, Le versioni correnti di 'sequelize' usano la versione di riserva di' bluebird'. Per catturare gli errori usa '.catch' o' .error'. La documentazione può essere trovata [qui] (http://bluebirdjs.com/docs/api-reference.html). –