📖 Scenario: You are building a simple NestJS API for a book store. You want to make sure only logged-in users can access the list of books.
🎯 Goal: Build a NestJS API that uses authentication to protect the GET /books endpoint so only authenticated users can get the book list.
📋 What You'll Learn
Create a simple array of book objects as data
Add a configuration variable to simulate a user token
Use a guard to check the token for authentication
Protect the GET /books route with the authentication guard
💡 Why This Matters
🌍 Real World
APIs often need to protect sensitive data so only authorized users can access it. Authentication guards in NestJS help secure routes easily.
💼 Career
Understanding how to secure APIs with authentication is a key skill for backend developers working with NestJS or any server framework.
Progress0 / 4 steps
1
DATA SETUP: Create the books data array
Create a constant array called books with these exact objects: { id: 1, title: 'NestJS Basics' } and { id: 2, title: 'Advanced NestJS' }.
NestJS
Hint
Use const books = [ ... ] with two objects inside.
2
CONFIGURATION: Add a token variable for authentication
Create a constant string called VALID_TOKEN and set it to 'secret-token' to simulate a valid user token.
NestJS
Hint
Use const VALID_TOKEN = 'secret-token';
3
CORE LOGIC: Create an authentication guard
Create a class called AuthGuard with a method canActivate(context) that returns true only if the request header authorization equals VALID_TOKEN. Use context.switchToHttp().getRequest() to get the request.
NestJS
Hint
Use class AuthGuard with a canActivate(context) method that checks the authorization header.
4
COMPLETION: Protect the GET /books route with AuthGuard
Create a controller class called BooksController with a method getBooks() that returns books. Use a decorator @UseGuards(AuthGuard) on getBooks to protect it.
NestJS
Hint
Use @UseGuards(AuthGuard) above getBooks() method inside BooksController.
Practice
(1/5)
1. Why is authentication important for securing NestJS APIs?
easy
A. It stops strangers from accessing protected routes.
B. It speeds up the API response time.
C. It automatically fixes bugs in the code.
D. It changes the API's data format.
Solution
Step 1: Understand the purpose of authentication
Authentication verifies who is using the API to prevent unauthorized access.
Step 2: Identify the effect on API security
By stopping strangers, authentication protects sensitive data and functionality.
Final Answer:
It stops strangers from accessing protected routes. -> Option A
Quick Check:
Authentication = Stops strangers [OK]
Hint: Authentication blocks unknown users from API access [OK]
Common Mistakes:
Thinking authentication speeds up API
Believing it fixes code bugs
Confusing authentication with data formatting
2. Which of the following is the correct way to apply an authentication guard in a NestJS controller?
easy
A. @AuthGuard('jwt') export class MyController {}
B. @UseGuards(AuthGuard('jwt')) export class MyController {}
C. @UseAuthGuard('jwt') export class MyController {}
D. @GuardUse(Auth('jwt')) export class MyController {}
Solution
Step 1: Recall NestJS guard syntax
Guards are applied using the @UseGuards() decorator with the guard class or strategy inside.
Step 2: Match the correct syntax for JWT guard
The correct syntax is @UseGuards(AuthGuard('jwt')) to apply the JWT strategy.
Final Answer:
@UseGuards(AuthGuard('jwt')) export class MyController {} -> Option B
C. AuthGuard is missing the strategy name like 'jwt'.
D. The route path 'data' is invalid.
Solution
Step 1: Check AuthGuard usage
AuthGuard requires a strategy name like 'jwt' to know which authentication method to use.
Step 2: Identify missing strategy parameter
Here, AuthGuard is used without ('jwt'), causing it to not work properly.
Final Answer:
AuthGuard is missing the strategy name like 'jwt'. -> Option C
Quick Check:
AuthGuard needs strategy name [OK]
Hint: Always provide strategy name to AuthGuard like 'jwt' [OK]
Common Mistakes:
Forgetting to add strategy name to AuthGuard
Thinking method must be async
Assuming route path 'data' is invalid
5. You want to secure a NestJS API route so only logged-in users can access it. Which combination correctly applies authentication and explains why it secures the API?
Options:
A) Use @UseGuards(AuthGuard('jwt')) to check user identity before route access, preventing strangers.
B) Use @UseInterceptors(AuthInterceptor) to log requests, which blocks unauthorized users.
C) Use @UseFilters(AuthFilter) to catch errors, which stops unauthorized access.
D) Use @UsePipes(AuthPipe) to validate data, which ensures only valid users access the route.
hard
A. Use @UsePipes(AuthPipe) to validate data, which ensures only valid users access the route.
B. Use @UseInterceptors(AuthInterceptor) to log requests, which blocks unauthorized users.
C. Use @UseFilters(AuthFilter) to catch errors, which stops unauthorized access.
D. Use @UseGuards(AuthGuard('jwt')) to check user identity before route access, preventing strangers.
Solution
Step 1: Identify the correct NestJS feature for authentication
Guards are designed to control access by checking user identity before route execution.
Step 2: Understand why guards secure APIs
Using @UseGuards(AuthGuard('jwt')) ensures only authenticated users with valid JWT tokens can access the route, blocking strangers.
Final Answer:
Use @UseGuards(AuthGuard('jwt')) to check user identity before route access, preventing strangers. -> Option D
Quick Check:
Guards + AuthGuard('jwt') = Secure API access [OK]
Hint: Use guards with AuthGuard('jwt') to secure routes [OK]
Common Mistakes:
Confusing interceptors, filters, or pipes with authentication guards
Thinking logging or error handling blocks unauthorized users
Assuming data validation equals authentication
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.