Passport身份验证不会通过

时间:2017-04-02 17:31:58

标签: node.js passport.js

我正在尝试使用本地策略的护照身份验证,但身份验证每次都失败,并且不会继续执行本地策略。 我添加了几个控制台日志,以查看代码脱轨的位置,但没有记录任何内容。

users.js(路由器)

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

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

router.get('/register', function(req, res, next) {
  res.render('register',{
    'title':'Register'
  });
});

router.get('/login', function(req, res, next) {
  res.render('login',{
    'title':'Login'
  });
});

passport.use(new LocalStrategy(
    function(username,password,done){
        console.log('words');
        User.getUserByUsername(username,function(err,user){
            if (err) throw err;
            if(!user){
                console.log('Unknown user');
                return done(null,false);
            }
        });
    }
));

router.post('/login',passport.authenticate('local',{failureRedirect:'/users/register'}),function(req,res){
    console.log('Authentication succesful');
    req.flash('success','You are logged in');
    res.redirect('/');
});

module.exports = router;

1 个答案:

答案 0 :(得分:1)

您是否设置了会话并为路由器添加了护照?我不知道在两个不同的位置设置初始化和会话方法是否有效。 这就是我工作的方式:全部设置在路由器中

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

passport.use(new LocalStrategy(
function(username, password, done) {
     User.findOne({username: username}, function (err, user) {
          if (err) { return done(err); }
          if (!user) {
               return done(null, false, { message: 'Incorrect username.' });
          }
          user.comparePassword(password, function (err, isMatch) {
               if (err) { return done(err); }
               if(!isMatch){
                    return done(null, false, { message: 'Incorrect password.' });
                } else {
                    return done(null, user);
                }
          });
       });
    }

));
passport.serializeUser(function(user, done) {
        done(null, {email: user.email, roles : user.roles});
});
passport.deserializeUser(function(session, done) {
    User.findOne({email: session.email}, function(err, user) {
          done(err, user);
    });
});
router.use(session({ secret: 'my super secret',name: 'my-id', resave: false, saveUninitialized: false }));

router.use(passport.initialize());
router.use(passport.session());

此外,如果进入生产阶段,则需要一个与MongoStore或Redis等快速会话不同的会话处理程序

路线

/* GET home page. */
 router.get('/', require('connect-ensure-login').ensureLoggedIn('login'), function (req, res, next) {
     if (req.user) {
         res.render('index');
    } else {
         res.redirect('/login');
    }
});

 router.get('/login', function (req, res, next) {
     res.render('login');
});
 router.post('/login', passport.authenticate('local', {
     successRedirect: '/',
     failureRedirect: '/login'
})); 

 router.get('/logout', function (req, res) {
req.logout();
res.render('logout');
});