2016-05-11 11 views
0

NodeJSアプリケーションでpassport-localを実装する際に問題があります。私はここで間違っていることを理解していない。ここではという重要なコードを記載します。Passportローカル戦略が呼び出されないNodeJS

app.js

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 
app.use(passport.initialize()); 
app.use(passport.session()); 

users.js

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var User = require('../models/user.js'); 

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

passport.deserializeUser(function(id, done) { 
    User.getUserById(id, function(err, user) { 
     done(err, user); 
    }); 
}); 

passport.use(new LocalStrategy(
    function(username, password, done) { 
     console.log('Entered passport'); // This doesn't even happen 
     User.getUserByUsername(username, function(err, user) { 
      if (err) throw err; 
      if (!user) { 
       console.log('Unknown User'); 
       return done(null, false, { 
        message: 'Unknown User' 
       }); 
      } 

      User.comparePassword(password, user.password, function(err, isMatch) { 
       if (err) throw err; 
       if (isMatch) { 
        return done(null, user); 
       } 
       console.log('Invalid Password'); 
       return done(null, false, { 
        message: 'Invalid Password' 
       }); 
      }); 
      return done(null, user); 
     }); 
    } 
)); 

router.post('/login', passport.authenticate('local', { 
    successRedirect: '/', 
    failureRedirect: '/users/login', 
    failureFlash: 'Invalid username or password' 
}), function(req, res) { 
    console.log("Authentication Successfull!"); 
    req.flash('success', 'You are logged in'); 
    res.redirect('/'); 
}); 

user.jsの(モデル):

module.exports.getUserByUsername = function(username, callback) { 
    var query = { username: username }; 
    User.findOne(query, callback); 
} 

module.exports.getUserById = function(id, callback) { 
    User.findById(id, callback); 
} 

module.exports.comparePassword = function(candidatePassword, hash, callback) { 
    bcrypt.compare(candidatePassword, hash, function(err, isMatch) { 
     if(err) return callback(err); 
     callback(null, isMatch); 
    }); 
} 

私は構文エラーは発生しません。 users.jsでは、コンソールにメッセージを記録したいのですが、そこにも届きません。そこにconsole.logがある関数を入力するだけで、ログイン時のpost関数が起動しますが、今はそうではないようです。ページをリロードするだけです(そのように見えます)。どんな助けもありがとうございます。パスポートはinitilized前

答えて

0

sessionミドルウェアをマウントしよう:

var session = require('express-session') 

app.use(session({ secret: 'xxxxxxx' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 
+0

私は秘密を使用する場合、私はそれが廃止予定だというメッセージを取得します – Patrick2607

関連する問題