20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rails 5.2系から6系へアップデートする際の落とし穴

Last updated at Posted at 2022-06-30

内容

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つあります

  1. Rails6.1系にアップデートをする
  2. 一旦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系へのアップデートを行うことができます

20
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?