当サイトは、一部記事に広告を含みます

Next.js15 × Vercelのアプリケーションで、本番環境のみBasic認証を実装する

NotionをCMSとしてNext.js × Vercelでブログアプリケーションを開発したのですが、パブリック公開しない予定なのでBasic認証をかけることにしました。

Webサイト制作ではレンタルサーバーを利用することがほとんどで、その場合はサーバのコンパネからかけられます。

今回の場合はNext.jsのMiddlewareを使えばわりとあっさり実装できたのですが、忘れそうなので記しておきます📝

要件ざっくり

  • ブログアプリケーションにBasic認証をかける
  • フロントはNext.js、バックエンドはVercelで実装
  • npm run devで認証がかかっているとめんどくさいので、本番環境のみ適用する

Next.jsの機能「Middleware」とは

Next.jsのMiddlewareは、リクエストとレスポンスの間で処理を挟む仕組み。
リクエストがサーバーに届いたときに実行され、ページを表示する前に特定の処理を追加できます。

Middlewareの主な用途は下記。

  • リクエストの条件をチェック(例:認証)
  • リダイレクト処理
  • カスタムレスポンスの送信

Middlewareサーバーサイドで動作するため、Basic認証のようなアクセス制限を実現するのに適している✍️

Next.js × Vercelで開発したアプリにBasic認証を実装する

middleware.tsを作成する

src/middleware.tsを作成し下記を記述します。

Loading code...

開発環境でもBasic認証を適用したい場合は、// Production環境のみ適用の部分のコードをコメントアウトしてください。

環境変数の設定

BASIC_AUTH_USERBASIC_AUTH_PASSWORDを環境変数に設定します。

Loading code...

👇Vercelの場合は「Settings > Environment Variables」で上記内容を登録。

設定できたら、アプリケーションをVercelにデプロイして完了です◎

注意点:静的ファイルにはNext.jsのMiddlewareが影響しない

Middlewareはリクエスト時にサーバーを介する処理にのみ影響します。
そのため、getStaticPropsgenerateStaticParamsで生成された静的ページには適用されません。

ただし、VercelではMiddlewareがプロキシレイヤーで動作するため設定が適切であれば問題なく認証が適用されるとのこと。よって今回の場合は問題なし。

まとめ

Next.jsのMiddlewareを使用することで、Vercel上で運用するアプリにBasic認証を簡単に設定できました✨

今回はバックエンドがVercelでしたが、MiddlewareはNext.jsの機能なので、他のバックエンド環境でも応用可能なはず。
AWS Lambdaやオンプレミスのサーバーでも同様の方法で認証を実現できるみたいなので、いつか試してみようと思います。

この記事が役に立ったら、
記事執筆のコーヒー代として応援してもらえると励みになります☕️

Buy Me A Coffee

関連記事