Next.jsでログイン必須ページにアクセスした際にブラウザバックで前のページに戻れない

公開日時

Next.jsで作ったサービスで、ログイン必須のページに未ログインでアクセスした場合に router.push('/login') でログインページに遷移させるようにしていた。

直リンクでのアクセスの場合は問題がないが、↓のように未ログインページからログイン必須ページにLinkを設置している場合、ブラウザバックで前のページに戻れないことに気づいた。

<Link href="/require_auth_page">ログイン必須ページ</Link>

現象としては↓が起きる。

  • 未ログイン状態でLinkをクリック
  • /require_auth_page にアクセス
  • /login に遷移
  • ブラウザバックを実行すると /require_auth_page に戻ってしまうため、再度ログインチェックが実行され /login に戻ってきてしまう
  • このため何度ブラウザバックを実行しても /login ページから移動できない状態になる

これを防ぐには router.push('/login') の代わりに router.replace('/login') を使う。

これにより /require_auth_page へのアクセスが /login に置き換えられるため、ブラウザバック時に最初のページに戻れるようになる。

参考


Related #next.js

Next.js使用時にrecoil-persistのStorageを変更する

クライアント側で実行された場合のみstorageを指定するようにした

Next.jsで環境に応じて特定のページを非表示にする

NODE_ENVでredirectsを出し分けた

Next.jsで動的URLをRewriteする

next.config.jsにrewritesを追加

Next.js + typescriptでpathsのエイリアスがModule not foundになる

next.config.jsに追記する必要があった

Next.js + Algoliaで全文検索UIを実装する

react-instantsearchを利用