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の開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitはβバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

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

関連記事

コメント