Rails7でリダイレクトの処理が少し変わったので見ていきます。
Rails のリダイレクト
Railsでは以下のように書くとリダイレクトすることができます。
# 内部URL
redirect_to root_path
# 外部URL
redirect_to 'https://example.com'
Rails7 のリダイレクト
Rails7からは Open Redirect protection がデフォルトとなり、外部のURLにリダイレクトするとUnsafeRedirectError
発生するようになりました(内部のURLにリダイレクトするときは今まで通りです)
例外を発生させないようにするために、allow_other_host: true
を設定する必要があります。
redirect_to 'https://example.com', allow_other_host: true
URLが内部URLかチェックする
パラメータでURLを渡す場合は、外部のURLになる可能性もあります。UnsafeRedirectError
をキャッチしても良いですが、内部URLかチェックするためにurl_from
を使うことができます。もし外部URLの場合はnilが変えるので、フォールバックするURLを書いておきましょう。
redirect_to url_from(params[:redirect_url]) || root_url
References