Concept Flow - Protected routes with guards
Request to route
Guard checks condition
Allow
Route handler executes
When a request comes in, the guard checks if access is allowed. If yes, the route runs. If no, access is denied.
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; @Injectable() export class AuthGuard implements CanActivate { canActivate(context: ExecutionContext): boolean { const request = context.switchToHttp().getRequest(); return !!request.user; } }
| Step | Action | Request.user | Guard Result | Route Execution |
|---|---|---|---|---|
| 1 | Request arrives at protected route | undefined | Check if user exists | No |
| 2 | Guard runs canActivate() | undefined | false | Blocked, 403 returned |
| 3 | Request arrives at protected route | { id: 1, name: 'Alice' } | Check if user exists | Yes |
| 4 | Guard runs canActivate() | { id: 1, name: 'Alice' } | true | Route handler runs |
| Variable | Start | After Step 1 | After Step 3 | Final |
|---|---|---|---|---|
| request.user | undefined | undefined | { id: 1, name: 'Alice' } | { id: 1, name: 'Alice' } |
| guard.canActivate result | N/A | false | true | true |
Protected routes use guards to check access. Guard's canActivate returns true or false. If true, route runs; if false, access denied (403). Common check: request.user exists. Guards run before route handlers.