尝试在 Node.js 应用中执行 Google 身份验证时请求超时 (v 0.10.13)
Request timed out while trying to do Google Auth in Node.js app (v 0.10.13)
我正在使用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 身份验证器只会将两个参数传递给回调;令人困惑的是,示例代码表明您的代码应该可以工作)
相关文章:
- 如何设置$.ajax请求的超时,并在超时时间过长时进行重做
- 如何在firefox-sdk中设置请求超时设置
- 什么会导致云代码计数 parse.com“请求超时”
- DROPZONE - 在 fle 上传期间处理 AJAX 请求中的会话超时
- 节点.js服务器在浏览器中超时,但 cURL 请求有效
- 尝试在 Node.js 应用中执行 Google 身份验证时请求超时 (v 0.10.13)
- 由于超时,预渲染请求已取消
- 快速中间件意味着请求超时
- 如何为JQuery$.ajax同步请求设置超时并执行某些操作
- jQueryAJAX请求在第一次请求后超时
- node.js HTTP服务器、请求和响应超时之间的区别
- 如何在fluxiblefetcher应用程序中增加ajax请求超时长度
- 为什么on('data')侦听器将两个不同的请求解释为一个,除非添加超时
- 全局配置所有$.ajax请求以支持超时重试
- jQuery请求循环与睡眠/超时
- 在Koa中禁用请求超时
- Node.js: http请求1分钟后超时
- 我如何测试如果一个URL是一个有效的图像与超时的图像请求与javascript
- ajax post请求超时不工作
- 确定/规避AJAX请求是否超时的方法