Bird
Raised Fist0
NestJSframework~8 mins

Session-based authentication in NestJS - Performance & Optimization

Choose your learning style10 modes available
Performance: Session-based authentication
MEDIUM IMPACT
This affects page load speed and interaction responsiveness by managing server-side session storage and cookie handling.
Managing user authentication state efficiently
NestJS
app.use(session({ secret: 'secret', resave: false, saveUninitialized: false }));
// resave: false avoids saving unchanged sessions
// saveUninitialized: false avoids saving empty sessions
Reduces unnecessary session writes and database or memory operations, improving response speed.
📈 Performance GainSaves 10-30ms per request and reduces server load
Managing user authentication state efficiently
NestJS
app.use(session({ secret: 'secret', resave: true, saveUninitialized: true }));
// resave: true forces session save on every request
// saveUninitialized: true saves empty sessions
Forcing session save on every request and saving uninitialized sessions causes unnecessary server load and slower response times.
📉 Performance CostIncreases server CPU usage and delays response by 10-30ms per request
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Session saved on every request (resave: true)N/AN/AN/A[X] Bad
Session saved only when changed (resave: false)N/AN/AN/A[OK] Good
Rendering Pipeline
Session-based authentication involves server-side session validation before responding to client requests, affecting the time before the browser receives content.
→Network
→Server Processing
→Response Time
⚠️ BottleneckServer Processing due to session lookup and validation
Core Web Vital Affected
INP
This affects page load speed and interaction responsiveness by managing server-side session storage and cookie handling.
Optimization Tips
1Avoid saving sessions on every request by setting resave to false.
2Use fast session stores like Redis or in-memory caches to speed up session validation.
3Set saveUninitialized to false to prevent saving empty sessions and reduce server load.
Performance Quiz - 3 Questions
Test your performance knowledge
What session option reduces unnecessary session saves in NestJS?
AsaveUninitialized: true
Bcookie.secure: true
Cresave: false
Drolling: true
DevTools: Network
How to check: Open DevTools, go to Network tab, filter requests, and check response times for authenticated endpoints.
What to look for: Look for increased server response times indicating session validation delays.

Practice

(1/5)
1. What is the main purpose of session-based authentication in NestJS?
easy
A. To keep user login information on the server for tracking user sessions
B. To store user passwords in the browser for quick access
C. To send user credentials with every request without storing them
D. To use tokens stored in local storage for authentication

Solution

  1. Step 1: Understand session-based authentication

    Session-based authentication stores user info on the server to track login status across requests.
  2. Step 2: Compare options with session concept

    Only To keep user login information on the server for tracking user sessions describes storing user login info on the server, which matches session-based authentication.
  3. Final Answer:

    To keep user login information on the server for tracking user sessions -> Option A
  4. Quick Check:

    Session stores user info on server = C [OK]
Hint: Sessions store user info on server, not client [OK]
Common Mistakes:
  • Confusing sessions with token storage
  • Thinking sessions store passwords in browser
  • Believing credentials are sent every request without storage
2. Which of the following is the correct way to import session support in a NestJS module?
easy
A. import { SessionModule } from '@nestjs/session';
B. import { SessionModule } from '@nestjs/common';
C. import { SessionModule } from 'express-session';
D. import { SessionModule } from 'nestjs-session';

Solution

  1. Step 1: Identify correct package for session in NestJS

    The official session support in NestJS is provided by '@nestjs/session'.
  2. Step 2: Check import statements

    Only import { SessionModule } from '@nestjs/session'; imports SessionModule from '@nestjs/session', which is correct syntax.
  3. Final Answer:

    import { SessionModule } from '@nestjs/session'; -> Option A
  4. Quick Check:

    SessionModule from '@nestjs/session' = D [OK]
Hint: SessionModule comes from '@nestjs/session' package [OK]
Common Mistakes:
  • Importing SessionModule from '@nestjs/common'
  • Confusing express-session with NestJS module import
  • Using incorrect package names
3. Given this NestJS controller snippet, what will be the output when a logged-in user accesses /profile?
import { Controller, Get, Req } from '@nestjs/common';

@Controller()
export class AppController {
  @Get('profile')
  getProfile(@Req() req) {
    if (req.session.user) {
      return `Hello, ${req.session.user.name}`;
    } else {
      return 'Not logged in';
    }
  }
}
medium
A. "Hello, undefined" if user exists but name is missing
B. "Not logged in" always
C. Throws an error because req.session is undefined
D. "Hello, Alice" if req.session.user.name is 'Alice'

Solution

  1. Step 1: Check session user existence

    The code checks if req.session.user exists to decide output.
  2. Step 2: Understand output when user exists

    If user exists with name 'Alice', it returns "Hello, Alice" string.
  3. Final Answer:

    "Hello, Alice" if req.session.user.name is 'Alice' -> Option D
  4. Quick Check:

    Session user present returns greeting = A [OK]
Hint: If session user exists, greet by name; else say not logged in [OK]
Common Mistakes:
  • Assuming req.session is always undefined
  • Ignoring the user existence check
  • Confusing output strings
4. Identify the error in this NestJS session setup code:
import { Module } from '@nestjs/common';
import { SessionModule } from '@nestjs/session';

@Module({
  imports: [
    SessionModule.forRoot({
      secret: 'mySecret',
      resave: false,
      saveUninitialized: true,
    }),
  ],
})
export class AppModule {}
medium
A. Missing 'cookie' configuration inside forRoot options
B. The secret should be an environment variable, not a string literal
C. 'resave' and 'saveUninitialized' are not valid options for SessionModule
D. SessionModule.forRoot should be replaced with SessionModule.register

Solution

  1. Step 1: Review SessionModule options

    In '@nestjs/session', options like 'resave' and 'saveUninitialized' are not valid; they belong to express-session directly.
  2. Step 2: Identify correct option usage

    SessionModule expects options like 'secret' and 'cookie', but not 'resave' or 'saveUninitialized'.
  3. Final Answer:

    'resave' and 'saveUninitialized' are not valid options for SessionModule -> Option C
  4. Quick Check:

    Invalid options in SessionModule config = B [OK]
Hint: Check if options belong to NestJS SessionModule or express-session [OK]
Common Mistakes:
  • Adding express-session options directly to SessionModule
  • Confusing 'forRoot' with 'register'
  • Ignoring required cookie config
5. You want to protect a NestJS route so only logged-in users with a session can access it. Which approach correctly checks the session and denies access if no user is logged in?
import { Controller, Get, Req, Res } from '@nestjs/common';
import { Response, Request } from 'express';

@Controller()
export class AppController {
  @Get('dashboard')
  dashboard(@Req() req: Request, @Res() res: Response) {
    // What should go here?
  }
}
hard
A. if (req.session.user === undefined) { throw new Error('No session'); } return 'Welcome';
B. if (!req.session.user) { return res.status(401).send('Unauthorized'); } return res.send('Welcome ' + req.session.user.name);
C. if (!req.session) { return 'Please login'; } return 'Dashboard';
D. if (req.session.user) { return 'Unauthorized'; } else { return 'Welcome'; }

Solution

  1. Step 1: Check if user is logged in via session

    We verify if req.session.user exists; if not, deny access with 401 status.
  2. Step 2: Return welcome message if user exists

    If user exists, send a welcome message with their name.
  3. Final Answer:

    if (!req.session.user) { return res.status(401).send('Unauthorized'); } return res.send('Welcome ' + req.session.user.name); -> Option B
  4. Quick Check:

    Check session user, deny if missing = A [OK]
Hint: Return 401 if no session user, else welcome [OK]
Common Mistakes:
  • Throwing errors instead of sending HTTP response
  • Checking only if req.session exists, not user
  • Reversing logic for authorization
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard