1

3.0.7 から 3.2.6 にアップグレードした Rails アプリケーションがあります。私はセッション ストアに Dalli と memcached を使用しています。

アップグレードしてから、WARNING: Can't verify CSRF token authenticityエラーが発生し始め、セッションがリセットされています。

csrf_meta_tagsヘッダーで呼び出します。

私の ApplicationController ではverify_authenticity_token、アプリが csrf_token を認識しているものを確認するためにオーバーライドしました。

def verify_authenticity_token
  verified_request?
  Rails.logger.info "+++ VERIFY AUTH TOKEN +++"
  Rails.logger.info session.inspect
end

アプリからフォームを送信しました。ロガーに書き込まれたセッション データは次のとおりです。 {"_csrf_token"=>"4OQ47F2py+l12lLSTnq0RTmyPbmPi2UGMZaPhMG6vVQ="}

これは、メタ タグでページに設定された値や、フォームで送信された値とは異なります。 {"authenticity_token"=>"qMsdBkTHoBH09+X0tnyoPsbtc752yKjCVHddrcufd7g="}


問題が解決しました

これは構成エラーが原因であることが判明しました。

session_storeconfig/initializers/session_store.rb で構成を設定していました。

require 'action_dispatch/middleware/session/dalli_store'
Rails.application.config.session_store :dalli_store

これはすべての環境で初期化されましたが、開発環境では、キャッシュのデフォルト構成はconfig.perform_caching = false.

イニシャライザ ファイルを削除し、セッション ストアの設定を production.rb ファイルに移動すると、問題が解決しました。

config.session_store = :dalli_store, 'localhost:11211'

これが 3.0.2 では問題にならなかったのに、3.2.6 では問題になった理由がわかりません。

4

0 に答える 0