Next.js(App Router)でBASIC認証をかける
2025/01/09 (木) - 09:00 JavaScriptServer
Next.jsのApp RouterでBASIC認証(基本認証)をかける場合は、middlewareという機能を使用します。これを使うとクライアントとサーバーの中間の処理制御を行えます。今回は以下の環境にて実装テスト。
- Next.js v14.xx
middlewareを使用するにはmiddleware.ts
というファイルを作成し処理を記述します。このmiddlewareはクライアントからのリクエストに対し様々なレスポンス処理をするものです。例えばアクセス認証やリダイレクトなどを行うことができ、nginx.confや.htaccessみたいな事ができます。ただしNext.jsでは現時点でmiddlewareを1つしか配置できませんのでsrcディレクトリがあれば、src/middleware.ts
に配置するようにします。
middleware.tsでBASIC認証をかける
middleware.tsに以下のように記述しました。
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
const username = process.env.BASIC_AUTH_USER;
const password = process.env.BASIC_AUTH_PASS;
export function middleware(request: NextRequest) {
const authHeader = request.headers.get('authorization');
if (authHeader) {
const encodedCredentials = authHeader.split(' ')[1];
const decodedCredentials = atob(encodedCredentials);
const [reqUsername, reqPassword] = decodedCredentials.split(':');
if (reqUsername === username && reqPassword === password) {
return NextResponse.next();
}
}
const response = new NextResponse('Authentication required', { status: 401 });
response.headers.set('WWW-Authenticate', 'Basic realm="Secure Area"');
return response;
}
export const config = {
matcher: '/((?!api|_next/static|favicon.ico|sitemap.xml|robots.txt).*)'
};
config.matcher
にマッチングルールを指定します。上記の例だとfavicon.icoや画像などの静的ファイルは認証から除外します。
そして、認証に必要なユーザ名とパスワードは安全のため.env
ファイルに記述します。
BASIC_AUTH_USER=user
BASIC_AUTH_PASS=password
認証がうまく行ったらアクセスしたコンテンツを表示し、認証に失敗したら401ステータスを返します。設定後Next.jsを再起動すると動くと思います。
おしまい♥
タグ:Next.js
おすすめ記事
- macOSでFTPソフトから踏み台経由でサーバーに接続する
- [React]入力フォームでフォーカスが外れたらエラーメッセージを出す、他
- Next.js(App Router)で、Fetch APIを使った静的ファイル生成(SSG)でヘマした
- Astro&microCMSで1ページ内にカテゴリごとの記事一覧を表示する
- OpenAI API(DALL·E 3)とNext.js(React)で画像生成プログラム
トラックバック & ピンバック
- この記事へのトラックバックURI:
- https://weblog.walk-life.me/nextjs_basicauth/trackback/