РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpCkSG 33 of 201 menu
◀ ▶

Подпись куки в Nest

Клиент может изменить текст куки вручную. Если там лежит идентификатор или флаг доступа, серверу нужно проверять, что значение не трогали после выдачи.

Секрет задают вторым аргументом при создании приложения в объекте cookies. Запись с флагом подписи идёт через адаптер, чтение подписанного значения - отдельной пометкой параметра из общего пакета. При неверной подписи в аргумент попадёт undefined.

Покажем на примере постов:

import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(AppModule, { cookies: { secret: 'dev-secret' }, }); await app.listen(process.env.PORT ?? 3000); } await bootstrap();

Контроллер запишет и прочитает подписанное значение:

import { Body, Controller, Get, Put, Res, SignedCookies, } from '@nestjs/common'; import { HttpAdapterHost } from '@nestjs/core'; import type { Response } from 'express'; @Controller('posts') export class PostController { adapterHost: HttpAdapterHost; constructor(adapterHost: HttpAdapterHost) { this.adapterHost = adapterHost; } @Put('viewer') setViewer( @Body('viewer') viewer: string, @Res({ passthrough: true }) response: Response, ): string { this.adapterHost.httpAdapter.setCookie( response, 'viewer', viewer, { signed: true }, ); return viewer; } @Get('viewer') getViewer( @SignedCookies('viewer') viewer: string | undefined, ): string { return viewer ?? 'guest'; } }

Настройте секрет при создании приложения работников, запишите подписанную куку идентификатора через WorkerController и верните её только если подпись верна.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить