【问题标题】:Credentials are not getting passed to authentication stategy凭据未传递给身份验证策略
【发布时间】:2015-01-09 06:22:29
【问题描述】:

我是节点快递和护照的新手,所以我不确定我错过了什么。我正在尝试使用自定义回调,因为我想要的只是来自我的注册策略的 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);
                });
            }

        });    

    });

}));

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    我认为您不应该将“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);
        });
      }
    ));
    

    【讨论】:

    • 谢谢,但我认为这个问题与我设置的控制器有关。我使用的是自定义解决方案,当你这样做时,你需要传入 req.我最终通过完全取消控制器来完成这项工作。
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多