passport.deserializeUserがたくさん呼び出される場合の対処法
Quick Fix
publicフォルダ等の静的コンテンツパス設定をPassportの設定より先に行うよう修正する。
[NG]
// passportの設定
app.configure(function() {
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
});
// 静的コンテンツの設定
app.use(express.static('public'));
[OK]
app.configure(function() {
app.use(express.static('public')); // 静的コンテンツの設定
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
});
環境
- Nodejs
- Expressjs
- passportjs
現象
本当は1アクセスに1回だけ呼び出される予定なのに、何回も呼び出されてしまう。
原因
Passportの設定の後に静的コンテンツパスの設定を行っているため、静的コンテンツへのアクセスがある時にもPassportの処理が呼び出されている。
対処法
Passportの設定をする前に、静的コンテンツパス設定を行うように修正することで解消する。
参考サイト
passport.deserializeUser called multiple times
Passport:middleware