webdevqa.jp.net

続編-findOne()。success()は未定義です

PostgresデータベースのORMとしてSequelizeを使用してLocalStrategyを作成するために、passport.jsドキュメントをフォローしています。ただし、認証中に、login.jsモジュールでUser.findOne(...).success(function(user){...]});を実行すると、undefinedが返されます。私は何が間違っているのですか?

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;

私のlogin.js(ルーター)

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;
8
Below the Radar

Sequelizeは、.success()関数を持たない bluebird promiseライブラリの修正バージョンを使用します。

代わりに、.then()を使用してください(これも Promises/A + 標準に従います):

User.find(options).then(
  function(user) { ... },
  function(err) { ... }
);
17
robertklep