每次PassportJS身份验证失败(LocalStrategy)

时间:2018-08-06 01:41:45

标签: javascript node.js authentication passport.js

我是SO&Node / Passport的新手,所以提前致歉。我一直在尝试使用Passport(已经可以进行注册)浏览网站的登录部分,但现在没有成功。我已经尝试了一些教程并通读了文档,但是与开始时相比,现在更加困惑了。

问题:尽管根据我的数据库(MongoDB)信息正确,passport.authenticate函数仍将“ user”返回为false。我没有收到任何错误消息,在/ dologin路由中,用户值为false,信息值为“ Missing Credentials”。让我知道是否可以提供其他信息-感谢您的帮助!

尝试:我已经将代码移到了不同​​的函数,文件等上。尝试了在线找到的不同解决方案,尝试了文档示例,并在模型中编写了自己的方法。等等

App.js文件

app.use(session({
  secret: 'secrettexthere',
  saveUninitialized: true,
  resave: true,
  // using store session on MongoDB using express-session + connect
  store: new MongoStore({
    mongooseConnection: mongoose.connection
  })
}));

// Init passport authentication
app.use(passport.initialize());
// persistent login sessions
app.use(passport.session());



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

     User.comparePassword(password, user.password, function(err,isMatch) {
       if (err) throw err;
       console.log('in comparepassword');
       if(isMatch) {
         console.log('isMatch');
         return done(null, user);
       } else { console.log('not match');
         done(null, false, {message:'Invalid username or password.'})};
     })

   });
  } ));

passport.serializeUser(function(user, done) {
 done(null, user.id);
});

passport.deserializeUser(function(id, done) {
 User.getUserById(id, function(err, user) {
   done(err, user);
 });
});

路由文件(理想情况下最终会将其移至我的控制器,但只想使其在某种程度上可以启动)

router.post('/dologin', function(req, res, next) {
  console.log(req);
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { console.log('nomatch');
    console.log(info);
    console.log('');
    console.log(user);
    return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      console.log('match match match');
      return res.redirect('/register');
    });
  })(req, res, next);
});

型号

module.exports.getUserByUsername = function(username, callback){
  var query = {username: username};
  User.findOne(query, callback);
};

module.exports.comparePassword = function(candidatePassword, hash, callback){
  bcrypt.compare(candidatePassword, hash, function(err,isMatch){
    if (err) throw err;
    callback(null, isMatch);
  });
};

module.exports.getUserById = function(id, callback){
  User.findById(id, callback);
};

0 个答案:

没有答案