Google回调时未触发GoogleStrategy

Google回调时未触发GoogleStrategy

该示例建议以下内容:

app.get('/auth/google/callback',
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/');
  });


哪个工作正常,但我注册了一条路线,该路线的方法如下,但不起作用。

exports.googleCallback = function(req, res, next) {
  passport.authenticate('google', { failureRedirect: '/login' }),
    (function(req, res) {
      // Successful authentication, redirect home.
      res.redirect('/');
    })(req, res, next);
};


它直接重定向,而不称为以下内容:

var GoogleStrategy = require('passport-google-oauth20').Strategy;

passport.use(new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "http://www.example.com/auth/google/callback"
  },
  function(accessToken, refreshToken, profile, cb) {
    console.log('Log here');
    User.findOrCreate({ googleId: profile.id }, function (err, user) {
      return cb(err, user);
    });
  }

));


我有console.log方法,该方法从不打印回叫,而是直接将页面重定向到/

最佳答案

我假设您重写了代码,因此可以使用如下代码:

app.get('/auth/google/callback', googleCallback)


在这种情况下,您可以使用Express也支持中间件数组的事实:

exports.googleCallback = [
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/');
  })
]


您的代码与此等效:

exports.googleCallback = function(req, res, next) {
  passport.authenticate('google', { failureRedirect: '/login' });

  const handler = function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/');
  };

 handler(req, res, next);
};


哪个功能完全不同(但解释了为什么仅发生重定向)。

关于node.js - Google回调时未触发GoogleStrategy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53109025/

10-11 07:31