护照认证无法通过



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

用户.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;

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

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

最新更新