未调用Passport身份验证

时间:2018-05-28 07:30:33

标签: node.js express routing passport.js

我在路由器中有代码

router.post('/auth', function(req, res) {
    oauth.auth(req, res);
});

正确点击

accesstokenController.auth = function(req, res) {
  console.log('Here auth called');
    passport.initialize(), passport.authenticate(
      'local', {
        session: false,
        scope: []
      },(req,res)), serialize, generateToken, respond
  };
在获得建议

的链接后添加

(req,res)

我相信它现在应该调用

passport.use(new Strategy(
  function(username, password, done) {
    console.log('Here pass called with ' + username + ' - ' + password);
    db.authenticate(username, password, done);
  }
));

但它永远不会打电话和超时。

如果Id像这样直接调用

app.post('/auth', passport.initialize(), passport.authenticate('local', { session: false,scope: [] }), serialize, generateToken, respond);

这没关系,

在我的上述方法中

accesstokenController.auth = function(req, res) {
      console.log('Here auth called');
        passport.initialize(), passport.authenticate(
          'local', {
            session: false,
            scope: []
          },(req,res)), serialize, generateToken, respond
      };

我刚刚创建了一个单独的方法,并从路由器页面调用它,而不是调用它的

我缺少什么

其他代码

const db = {
    updateOrCreate: function(user, cb) {
      cb(null, user);
    },
    authenticate: function(username, password, cb) {
      console.log('Here called');
      User.findOne({ username: username,
        password: password }).exec(function (err, user) {
        if (err) {
          cb(null,null);
        }
        else {
          cb(null,user);
        }
      });
    }
  }

function serialize(req, res, next) {
  console.log('Here pass called with ser ');
  db.updateOrCreate(req.user, function(err, user) {
    if (err) {
      return next(err);
    }
    // we store information needed in token in req.user again
    req.user = {
      id: user.id
    };
    next();
  });
}

function generateToken(req, res, next) {
  req.token = jwt.sign({
    id: req.user.id,
  }, SECRET, {
    expiresIn: TOKENTIME
  });
  next();
}

function respond(req, res) {
  res.status(200).json({
    user: req.user,
    token: req.token
  });
}

我有许多与此相关的链接,但无法解决此问题

1 个答案:

答案 0 :(得分:0)

您的策略需要返回done(),否则策略不知道何时完成,从而导致超时。

如果没有进一步的背景,很难说这是否是确切的问题。