尝试在 Node.js 应用中执行 Google 身份验证时请求超时 (v 0.10.13)

Request timed out while trying to do Google Auth in Node.js app (v 0.10.13)

本文关键字:超时 请求 身份验证 Node js 应用 Google 执行      更新时间:2023-09-26

我正在使用Passport在我的Node.js应用程序中进行Google身份验证。我把它托管在Heroku上。我面临的问题是它没有返回到我在 nodejs 代码中指定的成功回调。我希望成功登录时收到Succesfuly logged in消息。当我检查 Heroku 日志时,它显示"请求超时"

这是我的节点.js代码

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');
var app = express();
var hbs = require('hbs');
var passport = require('passport')
  , GoogleStrategy = require('passport-google').Strategy;
passport.use(new GoogleStrategy({
    returnURL: 'http://floating-citadel-4714.herokuapp.com/auth/google/return',
    realm: 'http://floating-citadel-4714.herokuapp.com'
    },
    function(identifier, profile, done){
        console.log('Success');
        console.log(identifier);
        console.log(profile);
            }
            ));
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
app.engine('html',hbs.__express);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/auth',function(req,resp){
    resp.sendfile('./views/auth.html');
});
app.get('/auth/google',passport.authenticate('google'));
app.get('/auth/google/return',
        passport.authenticate('google', { successRedirect: '/success',
                          failureRedirect: '/error' }));
app.get('/success',function(req,resp){
    resp.send('Succesfuly logged in');
});
app.get('/error',function(req,resp){
    resp.send('Error Loging in');
});
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

您没有在成功处理程序中调用done回调:

passport.use(new GoogleStrategy({
  returnURL: 'http://floating-citadel-4714.herokuapp.com/auth/google/return',
  realm: 'http://floating-citadel-4714.herokuapp.com'
  },
  function(identifier, profile, done){
    console.log('Success');
    console.log(identifier);
    console.log(profile);
    done(null, profile); // <-- important!
  }
));

如果您不这样做,Passport 将不知道您已完成,结果将是您的请求将停止并(最终)超时。

我怀疑日志记录消息会发生,因此这可能只能解决您的部分问题。

(PS:查看文档,您似乎正在使用的基于 OpenID 的 Google 身份验证器只会将两个参数传递给回调;令人困惑的是,示例代码表明您的代码应该可以工作)