Merge pull request 'refactor: exit-view and view-as routes to manage cookies directly' (#6) from refactor--cookies into main
All checks were successful
Deploy Stage / deploy (push) Successful in 2m39s

Reviewed-on: #6
This commit is contained in:
Oleg Yurchik 2025-10-03 11:11:44 +00:00
commit 27dafa1c34
3 changed files with 16 additions and 23 deletions

View File

@ -1,10 +1,12 @@
import { NextResponse } from 'next/server';
import { disablePilotView, requireRole } from '../../../lib/auth/session';
import { requireRole } from '../../../lib/auth/session';
export async function GET(request: Request) {
// Возвращаем HR к своему интерфейсу.
// Cookie `alabuga_view_as` хранит флаг режима просмотра, удаляем его и редиректим в админку.
await requireRole('hr');
disablePilotView();
return NextResponse.redirect(new URL('/admin', request.url));
const response = NextResponse.redirect(new URL('/admin', request.url));
response.cookies.delete('alabuga_view_as');
return response;
}

View File

@ -1,10 +1,18 @@
import { NextResponse } from 'next/server';
import { enablePilotView, requireRole } from '../../../lib/auth/session';
import { requireRole } from '../../../lib/auth/session';
export async function GET(request: Request) {
// Доступно только HR: включаем режим просмотра и отправляем на дашборд кандидата.
// Благодаря этому HR увидит интерфейс пилота без необходимости заводить отдельную учётку.
await requireRole('hr');
enablePilotView();
return NextResponse.redirect(new URL('/', request.url));
const response = NextResponse.redirect(new URL('/', request.url));
response.cookies.set('alabuga_view_as', 'pilot', {
httpOnly: true,
sameSite: 'lax',
secure: process.env.NODE_ENV === 'production',
path: '/',
maxAge: 60 * 60,
});
return response;
}

View File

@ -47,7 +47,6 @@ export async function getSession(): Promise<SessionPayload | null> {
return { ...session, viewAsPilot };
} catch (error) {
console.warn('Session validation failed:', error);
store.delete(SESSION_COOKIE);
return null;
}
}
@ -94,19 +93,3 @@ export function destroySession() {
store.delete(SESSION_COOKIE);
store.delete(VIEW_COOKIE);
}
export function enablePilotView(): void {
// HR включает режим просмотра интерфейса пилота, чтобы видеть клиентские экраны.
cookies().set(VIEW_COOKIE, 'pilot', {
httpOnly: true,
sameSite: 'lax',
secure: process.env.NODE_ENV === 'production',
path: '/',
maxAge: 60 * 60,
});
}
export function disablePilotView(): void {
// Возвращаем интерфейс HR к обычному виду.
cookies().delete(VIEW_COOKIE);
}