我仅将 passport.js 用于 Google、Facebook 和 Twitter 登录。
Node.js v0.8.19 与 express.js 3.1.0 和 passportjs 版本 0.1.16。(护照-facebook - 0.1.5,推特 - 0.1.4 护照-goolge-oauth - 0.1.5)
在运行 passport.js 一个小时左右的应用程序停止将用户序列化到 req.user 会话后,一切都可以正常工作一段时间。
Facebook 和 google 正在从各自的 api 接收有意义的完整数据
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
var temp = {}
temp.name = profile.displayName
temp.id = profile.id
console.log(temp)
return done(null, temp);
}));
此处的console.log 将成功打印用户ID 和名称,但是在调用之后
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
序列化和反序列化取自 passport-facebook示例。
用户不会附加到 req.user。
Twitter 从来没有走那么远,在返回回调 url 后,twitter 给出了错误:
Error: failed to find request token in session
[03/11 23:28:24 GMT] at Strategy.OAuthStrategy.authenticate
注意:这些故障只发生在一段时间后,正常工作一段时间。这就是为什么我认为这可能是一个内存问题,就像我将会话保存在内存中而不是一个厨师。
这是我的快速应用配置
app.configure(function(){
app.set('port', process.env.PORT || 8080);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieSession({ secret: 'tobo!', cookie: { maxAge: new Date(Date.now() + 3600000), }}));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
我查看了邮件列表等,但找不到与此问题匹配的内容。我已经检查了我的本地主机和 nodejitsu 服务器。一切都工作了一段时间然后失败了。