Перейти к содержимому

Basic Auth Password

1.Проверка среды выполнения:

if (process.env.NODE_ENV !== 'production') проверяет, что код выполняется не в Production среде. Если это так, то middleware просто пропускает запрос дальше с помощью NextResponse.next().

2.Production среда:

Если среда выполнения — Production, то выполняется логика с базовой авторизацией.

Таким образом, в Development среде middleware будет просто пропускать запросы, а в Production — требовать авторизацию.

./middleware.ts
import { NextRequest, NextResponse } from 'next/server'
export const config = {
matcher: ['/:path*', '/index/:path*'],
}
export function middleware(req: NextRequest) {
// Проверяем, что мы в Production
if (process.env.NODE_ENV !== 'production') {
return NextResponse.next()
}
const basicAuth = req.headers.get('Authorization')
if (basicAuth) {
const authValue = basicAuth.split(' ')[1]
// atob устарел, но Buffer.from недоступен в Next.js edge.
const [user, password] = atob(authValue).split(':')
if (user === 'login' && password === 'password') {
// Укажите свой логин и пароль для входа
return NextResponse.next()
}
return NextResponse.json(
{ error: 'Неверные учетные данные' },
{
headers: { 'WWW-Authenticate': 'Basic realm="Secure Area"' },
status: 401,
}
)
} else {
return NextResponse.json(
{ error: 'Пожалуйста, введите учетные данные' },
{
headers: { 'WWW-Authenticate': 'Basic realm="Secure Area"' },
status: 401,
}
)
}
}