0
0

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.

ActionController::Redirecting::UnsafeRedirectErrorへの対処法

Last updated at Posted at 2022-10-30

概要

質問投稿アプリを作っている最中、
投稿に失敗したら質問投稿画面に戻る仕様を実装してる際に、表題のエラーに捕まりました。

↓当該コード

microposts_controller.rb
def create
  @micropost = current_user.microposts.build(micropost_params)
  if @micropost.save
    flash[:success] = "Micropost created!"
    redirect_to root_url
  else
    redirect_to 'microposts/new'
  end
end

結論

原因は下から3行目のredirect_to 'microposts/new'にありました。

エラーを解消する方法は以下の2つです。

①リクエストを経由する必要がない場合はredirect_toをrenderに置換する
 (そもそもrenderとredirect_toの違いって何だっけ?という方は以下へ)
  https://qiita.com/koki_73/items/78b8cb2bde7930d55194

②以下のコードをapplication_controllerに加える

application_controller.rb
  rescue_from ActionController::Redirecting::UnsafeRedirectError do
    redirect_to root_url
  end

エラーの内容

リダイレクトした際に外部サイトへ遷移してしまうことを防ぐために
Railsが発生させたエラーでした。
②のコードもRailsがそのエラーへの解決策として用意したものです。

ただ②を加えると今後発生し得る全てのUnsafeRedirectErrorが
パスしてしまうため注意が必要です。

私は①で解決しました。単純な内容でつまずいてました…。

参考

↓より詳しい解説
https://blog.saeloun.com/2022/02/08/rails-7-raise-unsafe-redirect-error.html

↓②のGithub
https://github.com/rails/rails/commit/c3758a71af949db849d5b7f176677653e4e4fae9

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?