Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • NestJS Documentation21টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • Installation
  • Modules
  • Controllers
  • Providers & DI
  • Pipes
  • Guards
  • Interceptors
  • Exception Handling
  • Middleware
  • Database
  • Authentication
  • Config & Env
  • File Upload
  • WebSockets
  • Microservices
  • Swagger
  • Testing
  • Best Practices
  • Project
  • Interview
  1. Docs
  2. NestJS
  3. NestJS Guards & Authorization
NestJSAdvanced

NestJS Guards & Authorization

@CanActivate, auth guard, role guard, apply — Authentication/Authorization বাংলায়।

13টি অংশবাংলা ভাষায়

Guard request execution-এর আগে decide করে — request এগোবে কি না। এটি authentication/authorization-এর জন্য প্রধান tool।

Auth Guard তৈরি

npm i @nestjs/jwt
src/auth/auth.guard.tstypescript
typescript
import {
  Injectable,
  CanActivate,
  ExecutionContext,
  UnauthorizedException,
} from "@nestjs/common";
import { JwtService } from "@nestjs/jwt";
import { Request } from "express";

@Injectable()
export class AuthGuard implements CanActivate {
  constructor(private jwtService: JwtService) {}

  async canActivate(context: ExecutionContext): Promise<boolean> {
    const request = context.switchToHttp().getRequest<Request>();
    const token = this.extractToken(request);

    if (!token) {
      throw new UnauthorizedException("Login প্রয়োজন");
    }

    try {
      const payload = await this.jwtService.verifyAsync(token);
      request["user"] = payload; // controller-এ access
    } catch {
      throw new UnauthorizedException("Invalid token");
    }

    return true;
  }

  private extractToken(request: Request): string | undefined {
    const [type, token] = request.headers.authorization?.split(" ") ?? [];
    return type === "Bearer" ? token : undefined;
  }
}

Guard Apply করা

import { Controller, Get, UseGuards } from "@nestjs/common";
import { AuthGuard } from "../auth/auth.guard";

@Controller("profile")
@UseGuards(AuthGuard) // পুরো controller protected
export class ProfileController {
  @Get()
  getProfile(@Req() req: Request) {
    return { user: req["user"] };
  }

  @Get("public")
  // এটা কোনো guard ছাড়া ধরে দরকার হলে override
  publicEndpoint() {
    return { message: "public" };
  }
}

Role Guard (Custom metadata)

src/auth/roles.decorator.tstypescript
typescript
import { SetMetadata } from "@nestjs/common";

export const ROLES_KEY = "roles";
export const Roles = (...roles: string[]) =>
  SetMetadata(ROLES_KEY, roles);
src/auth/roles.guard.tstypescript
typescript
import { Injectable, CanActivate, ExecutionContext, ForbiddenException } from "@nestjs/common";
import { Reflector } from "@nestjs/core";
import { ROLES_KEY } from "./roles.decorator";

@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private reflector: Reflector) {}

  canActivate(context: ExecutionContext): boolean {
    const requiredRoles = this.reflector.getAllAndOverride<string[]>(
      ROLES_KEY,
      [context.getHandler(), context.getClass()],
    );

    if (!requiredRoles) return true;

    const { user } = context.switchToHttp().getRequest();
    if (!user?.role || !requiredRoles.includes(user.role)) {
      throw new ForbiddenException("অনুমতি নেই");
    }
    return true;
  }
}
@Controller("admin")
@UseGuards(AuthGuard, RolesGuard)
export class AdminController {
  @Get()
  @Roles("admin") // শুধু admin
  dashboard() {
    return { message: "Admin panel" };
  }
}

Global Guard

// main.ts
const app = await NestFactory.create(AppModule);
app.useGlobalGuards(new RolesGuard());
// app.module-এ providers সেকশনে ensure করুন
Guard vs Middleware

Middleware-এর পরে guards চলে — guards-এ ExecutionContext ও reflector/meta-data access পাই, তাই authorization গার্ডেই করা ভালো।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরNestJS Pipes & ValidationপরেরNestJS Interceptors
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com