我按照Passport js页面中给出的代码示例。
app.get('/fbconnect', function (req, res) {
var loadingMessage = "Connecting to Facebook. Please Wait";
res.render('index', { title : 'Home', message : DEFAULT_MESSAGE, loadingMessage : loadingMessage, loadingDivDisplay : "block"}, function(err, html) {
if (!err) {
passport.authenticate('facebook', { scope : ['email', 'publish_actions'] })(req, res);
}
});
});
app.get('/auth/facebook/callback', function (req, res) {
var loadingMessage = "Processing the request. Please wait",
isAuthenticationError = false;
if(req.query && req.query.error){
req.session.authError = req.query.error;
req.session.authErrorReason = req.query.error_reason;
isAuthenticationError = true;
}
res.render('index', { title : 'Home', message : DEFAULT_MESSAGE, loadingMessage : loadingMessage, loadingDivDisplay : "block"}, function(err, html){
if (isAuthenticationError === true) {
res.redirect('/');
} else {
console.log("into right place");
passport.authenticate('facebook', { successRedirect: '/authorisationComplete'})(req, res);
}
});
});
但我面临一些我自己的服务器问题,这需要很长时间,然后在身份验证后显示网关超时问题。
我尝试在从FB进行身份验证后立即从我的服务器显示一条消息(例如"处理请求。请等待"),同时花费2分钟的时间来达到网关超时。
但失败了。有人可以帮忙吗
答案 0 :(得分:0)
这是通过Connect的session中间件来处理的,例如:
.use(connect.session({ secret: 'mysecretkey', cookie: { maxAge: 60000 }}))
这是你要找的吗?
答案 1 :(得分:0)
根据http://expressjs.com/4x/api.html#res.render,当您提供回调时,您必须确保呈现html字符串。
ie ..
var express = require('express');
var app = express();
app.engine('html', require('ejs').renderFile);
app.get('/', function(req, res){
res.render('test.html', function (err, html) {
res.end(html); // explicitly sending the html response to the client
});
});
app.listen(3000);
将呈现响应。但
var express = require('express');
var app = express();
app.engine('html', require('ejs').renderFile);
app.get('/', function(req, res){
res.render('test.html', function (err, html) {
// this is equivalent to what you have . No explicit response. You should try adding a res.end(here) here
});
});
app.listen(3000);
不会