対応方法
middleware を使用する。
// middleware.ts
import { NextResponse, NextRequest } from 'next/server';
export const config = {
// /hoge/ 以下のパスに対して Basic 認証をかける
matcher: ['/hoge/:path*'],
}
export function middleware(req: NextRequest) {
const basicAuth = req.headers.get('authorization');
if (basicAuth) {
const authValue = basicAuth.split(' ')[1];
const [user, password] = atob(authValue).split(':');
if (user === process.env.BASIC_AUTH_USER
&& password === process.env.BASIC_AUTH_PASSWORD) {
return NextResponse.next();
}
}
return new NextResponse('Unauthorized', {
status: 401,
headers: {
'WWW-Authenticate': 'Basic realm="Secure Area"',
},
});
};
# .env.local
BASIC_AUTH_USER=foo
BASIC_AUTH_PASSWORD=bar
環境
% npx next -v
Next.js v14.0.3