私は、Google、Facebook、および Twitter のログインのみに Passport.js を使用しています。
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 を実行しているアプリの 1 時間ほど後に、ユーザーの 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'));
});
メーリングリストなどを見ましたが、この問題に該当するものは見つかりませんでした。localhost と nodejitsu サーバーで確認しました。すべてがしばらくの間機能し、その後失敗します。