2016-05-11 3 views
0

У меня есть некоторые проблемы с выполнением паспорта в местном приложении NodeJS. Я не понимаю, что я здесь делаю неправильно. Я перечислил важный код для этого вопроса.Локальная стратегия паспорта не называется 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 я хочу записать сообщение на консоль, но он даже не попадает туда. Функция post при входе в систему запускается, когда я просто вводю функцию с помощью console.log, но теперь кажется, что это не так. Он просто перезагружает страницу (выглядит так). Любая помощь приветствуется.

ответ

0

попытаться смонтировать session промежуточное программное обеспечение, прежде чем паспорт initilized:

var session = require('express-session') 

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

Когда я использую секрет я получаю сообщение о том, что это не рекомендуется – Patrick2607

Смежные вопросы