How to store, read and delete cookies and sessions in Nest.js
Asked Answered
B

2

12

How to store, read and delete cookies and sessions in Nest.js?

Should I use this:

@nestjs/common > session

Or should I use js-cookie?

Bryon answered 2/5, 2019 at 7:56 Comment(0)
D
13

Create Cookie

async myMethod(@Req() req, @Res() res) {
  res.cookie('session', myCookieData, myOptionalCookieOptions);
  ....

Read Cookie

async myMethod(@Req() req, @Res() res) {
  req.cookies['session']; // If unsigned cookie;
  req.signedCookies['session']; // If signed cookie;

Store Cookie

You can store the cookie wherever you like. However, if you are using it for auth then check out @nestjs/passport link

Delete Cookie

async myMethod(@Req() req, @Res() res) {
  res.clearCookie('session', mySameOptionsFromCreationOfCookieMustMatch);

Note: "Web browsers and other compliant clients will only clear the cookie if the given options is identical to those given to res.cookie(), excluding expires and maxAge." link

Dewie answered 6/3, 2020 at 22:13 Comment(2)
It depends on if you are trying to read or create the cookie. Reading it would be in the response (res), creating it means sending it back to the client in the request (req).Dewie
Yes, clearCookie() should have been res.clearCookie(). I have made the change, thanks.Dewie
P
0

Updated Answer

at the moment in order to add, create, update or delete a cookie you need to install express dependency named cookie-parser to the main.ts in order to parse the cookie first and then process it in the way you want.

  1. install the cookie-parser
npm i cookie-parser
npm i -D @types/cookie-parser 
  1. add the cookie-parser as global middleware in main.ts
import * as cookieParser from 'cookie-parser';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module.ts';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // somewhere in your initialization file
  app.use(cookieParser());
  await app.listen(3000);
}
bootstrap();
  1. now you are able to process the cookie

Use the Request & Response type from express

// auth.controller.ts
@Get('/logout')
  cookie(@Req() request: Request, @Res() response: Response) {
    console.log(request.cookies); // or "request.cookies['name']"

    response.cookie('key', 'value') // for setting the cookie
    
  }

there's more information for cookie configuration with Fastify and more explained in docs

Petticoat answered 31/8, 2024 at 7:57 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.