久しぶりにpassport-twitterを使ってみたところ、Failed to find request token in sessionというエラーが出てログインができませんでした。
このエラーを調べてみると、だいたいよく見つかる情報として、localhostだったのに127.0.0.1に戻って来てるから、とか、とりあえず127.0.0.1に統一しておけばいい、のような情報が見つかります。
しかし今回はどうも統一してもうまくいかずエラーが改善しなかったため、他に原因がありそうでした。
詳しくはわかりませんが、セッションの設定を下記のようにすることで改善しました。
app.use(
require('express-session')({
secret: process.env.APP_KEY,
resave: true,
saveUninitialized: false,
cookie: { secure: process.env.NODE_ENV == 'production' }
})
)
resave, saveUninitialized, cookieを上記のように指定しています。元々resaveとsaveUninitializedはデフォルトがあるだろうしそのままでいいだろう、と思って省略していたのですが、よくよく見るとビルド時に下記のようなログが出ていました。
express-session deprecated undefined resave option; provide resave option server/index.ts:46:35
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option server/index.ts:46:35
READMEに
The default value is true
とあったのでデフォルトがあると思っていたのですが、よくよく続きを読むと
The default value is true, but using the default has been deprecated
ということで無指定はdeprecatedでした。よくよく調べ直して設定してみたところうまく動くようになりました。とりあえずsaveUninitializedがデフォルトと違うようなのでこちらが問題だったのかもしれません(正直このオプションによる挙動の違いはマニュアルを見ても全くわからないのですが…)。何にしろ同様のパターンでうまくいかない方はこのあたりを調整してみると良いかもしれません。
ちなみに、express-mysql-sessionを使用した時はresaveはtrueにしないと保存したセッション情報を何度も別のもので上書きしてしまうようでした。使用しているstoreによっても変わってくるようなので適宜確認して見る必要がありそうです。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント