2019-02-15に更新

passport-twitterでFailed to find request token in sessionエラー

久しぶりに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開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント