内容
Rails 5.2系から6系へアップデートをした際に、ActionView::Template::Error invalid base64
エラーが発生してしまう
結論
CSRFトークンのフォーマットの違いが原因で発生するエラー
Rails 5.2.5ではCSRFトークンのフォーマットにbase64_urlsafeを利用しているのですが、Rails 6.0系ではbase64_strictを利用している、この違いによってArgumentErrorが起きるようです
原因
Rails6.0系のアップデートで、フォーマット方式を変更できるオプションを用意しないまま、フォーマット方式が強制的に変わってしまった
それにより、base64_urlsafeをデコードできずに、エラーが発生してしまう
rails: 5.2.5 -> 6.0.x
CSRF Token format: base64_urlsafe → base64_strict
解決法
解決策は2つあります
- Rails6.1系にアップデートをする
- 一旦5.2.6にバージョンアップし、
Rails.application.config.action_controller.urlsafe_csrf_tokens
の設定をする
1. Rails6.1系にアップデートをする
Railsの6.1系からは、CSRFトークンのデフォルトエンコード方式がurlsafe版のbase64に切り替わっているので、問題なくアップデートができる
2. 一旦5.2.6にバージョンアップ
Rails.application.config.action_controller.urlsafe_csrf_tokensというフォーマット方式を設定できるオプションが
5.2系は5.2.6で設定可能になりました
この設定をすることにより、安全にRails6.0系へのアップデートを行うことができます