Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PassportJS不能进行身份验证_Javascript_Node.js_Express_Passport.js - Fatal编程技术网

Javascript PassportJS不能进行身份验证

Javascript PassportJS不能进行身份验证,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我做错了什么?它总是重定向到失败页面,但我无法调试 // passport var passport = require('passport'), LocalStrategy = require('passport-local').Strategy, User = require('./models/user.js').Model; passport.use(new LocalStrategy({ usernameField: 'email', password

我做错了什么?它总是重定向到失败页面,但我无法调试

// passport
var passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy,
    User = require('./models/user.js').Model;

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password'
  },
  function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      console.log('entrou');
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));


// login
app.get('/login', user.login);
app.post('/login',
  passport.authenticate('local', { 
    successRedirect: '/',
    failureRedirect: '/login' 
  })
);

我在passport.js未进行身份验证时也遇到了一些问题。这就是它对我的作用:

/**
 * Local authentication strategy
 *
 */
passport.use('local', new LocalStrategy(function(username, password, done) {
  //async code waits until next()
  process.nextTick(function() {
    //searches the database for the user
    //that matches the username|e-mail and password provided
    models.User.checkCredentials(username, password, function(err, user) {
      if (err) {
        return done(err);
      }

      //user is not found
      if (!user) {
        return done(null, false, {message: 'Unknown user ' + username});
      }

      return done(null, user);
    });
  });
}));
登录用户

app.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    // if user is not found due to wrong username or password
    if (!user) {
      return res.render('login', {
        //you can send a message to your view
        message: 'Invalid username or password'
      });
    }
    //passport.js has a logIn user method
    req.logIn(user, function(err) {
      if (err) { return next(err); }

      return res.redirect('/');
    });
  })(req, res, next);
});

findOne是如何实现的?另外,
err
user
在登录(
console.log
它们)后是否包含预期值?您是否实现了passport.serializeUser和passport.deserializeUser以及passport的所有其他要求?我遇到了类似的问题,调试显示(!user.validPassword)在内部方法将其设置为true之前返回false。(几乎就像在异步方法中执行一样,但它是同步的,对吗?)--编辑:我发现,bcrypt在我的auth函数中触发了一个异步方法,因此它在有机会计算bcrypt的响应之前计算为false。