Passport-local永远不会使用正确的凭据进行身份验证

时间:2016-11-16 15:22:47

标签: javascript node.js mongodb passport.js passport-local

我尝试使用passport-local将一些身份验证和密码哈希烘焙到一个小型网络应用中。我相信我已经正确设置了它,但是我通过失败重定向再次登录,即使凭据是正确的110%。

护照文档对调试错误非常轻松,任何人都可以分享这个故障重定向的可能原因,或提供继续调试的解决方案吗?

Passport配置

passport.use(new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  function(username, password, cb) {
     UserSchema.findByUsername(username, function(err, user) {
      if (err) { return cb(err); }
      if (!user) { return cb(null, false); }
      if (user.password != password) { return cb(null, false); }
      return cb(null, user);
    });
  }));

登录路线

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

架构和findByUsername函数

const UserSchema = mongoose.Schema ({
  firstName: {
    type: String,
    index: true
  },
  lastName: {
    type: String,
    index: true
  },
  email: {
    type: String,
    index: true
  },
  password: {
    type: String,
    index: true
  },
  homeAirport: {
    type: String,
    index: true
  }
})

UserSchema.plugin(passportLocalMongoose)

// Adding this function to find by username
exports.findByUsername = function(username, cb) {
  process.nextTick(function() {
    for (var i = 0, len = records.length; i < len; i++) {
      var record = records[i];
      if (record.username === username) {
        return cb(null, record);
      }
    }
    return cb(null, null);
  });
}

// Export it to the app
module.exports = mongoose.model('user', UserSchema)

1 个答案:

答案 0 :(得分:0)

取自Passport文档:

  

重定向通常在验证请求后发出。

我猜是因为你只有一个{failureRedirect: '/login' } 你总是被重定向到那里。尝试添加:

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

因此,在这种情况下,您有successRedirectfailureRedirect

或者您也可以在身份验证后删除重定向,而是重定向用户,如下所示:

app.post('/login',
  passport.authenticate('local'),
  function(req, res) {
    console.log('Successfully logged in');
    res.redirect('/users/' + req.user.username);
  });

让我知道这是否有效