凭据未传递给身份验证策略

时间:2014-04-05 04:19:37

标签: node.js express passport.js

我是节点快递和护照的新手,所以我不确定我缺少什么。我正在尝试使用自定义回调,因为我想要的是来自我的注册策略的json响应。目前我不断收到以下错误“缺少凭据”。我已经有一段时间了,而且我被卡住了。

这是我的控制器:

app.post('/services/authentication/registration', function(req, res, next) {
  console.log('before authentication')
  passport.authenticate('local-registration', function(err, user, info) {
console.log('authentication callback');
    if (err)          { return res.send({'status':'err','message':err.message});}
    if (!user)        { return res.send({'status':'err','message':info.message});}
    if (user!=false)  { return res.send({'message':'registration successful'});}
  })(req, res, next);
},
function(err, req, res, next) {
  return res.send({'status':'err','message':err.message});
});

我的护照策略:

passport.use('local-registration', new LocalStrategy({
    // by default, local strategy uses username and password, we will override with email
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true 
},
function(req, email, password, done) {
    console.log('credentials passed to passport' + email + '' + password)
    // asynchronous
    // User.findOne wont fire unless data is sent back
    process.nextTick(function() {

        // find a user whose email is the same as the forms email
        // we are checking to see if the user trying to login already exists
        User.findOne({ 'local.email' :  email }, function(err, user) {
            // if there are any errors, return the error
            if (err)
                return done(err);
            // check to see if theres already a user with that email
            if (user) {
                return done(null, false, {message: 'User already exists'});
            } else {

                // if there is no user with that email
                // create the user
                var newUser            = new User();

                // set the user's local credentials
                newUser.local.email    = email;
                newUser.local.password = newUser.generateHash(password);

                // save the user
                newUser.save(function(err) {
                    if (err)
                        throw err;
                    return done(null, newUser);
                });
            }

        });    

    });

}));

1 个答案:

答案 0 :(得分:0)

我认为你不应该发送" req"作为认证功能的参数。从护照文档中看一下这个例子:

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.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));