2016-05-11 4 views
0

aufgerufen Ich habe Probleme bei der Implementierung von Pass-Local auf meiner NodeJS-Anwendung. Ich verstehe nicht, was ich hier falsch mache. Ich werde den wichtigen Code für diese Frage hier auflisten.Passport Local Strategy wird nicht 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 (Modell):

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

Ich bin keine Syntaxfehler bekommen. In users.js möchte ich eine Nachricht auf der Konsole protokollieren, aber es kommt nicht einmal dorthin. Die Post-Funktion auf dem Login wird ausgelöst, wenn ich nur eine Funktion mit einer console.log dort eingeben, aber jetzt scheint es, dass es nicht. Es lädt nur die Seite neu (sieht so aus). Jede Hilfe wird geschätzt.

Antwort

0

versuchen session Middleware zu montieren vor dem Pass initilized:

var session = require('express-session') 

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

Wenn ich ein Geheimnis verwende ich eine Meldung erhalten, es veraltet ist – Patrick2607