Google回调时未触发GoogleStrategy

时间:2018-11-01 20:38:58

标签: node.js passport.js

该示例建议以下内容:

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方法,该方法从不打印回叫,而是直接将页面重定向到/;

1 个答案:

答案 0 :(得分:1)

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

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

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

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);
};

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