Guard trong NestJS
Bài 8 – Guard và cơ chế kiểm soát truy cập trong NestJS
Bài 8 / 8
Guard trong NestJS
Guard là cơ chế kiểm soát quyền truy cập trước khi request đến controller. Guard quyết định xem request có được phép tiếp tục hay bị chặn lại, thường dùng trong xử lý authentication và authorization.
1. Nội dung chính
- Guard là gì và vai trò trong pipeline request.
- Tạo guard bằng Nest CLI.
- Implement interface
CanActivate. - Sử dụng decorator
@UseGuards(). - Guard cho phép kiểm tra token, quyền truy cập, điều kiện logic trước khi xử lý request.
2. Ví dụ
// Tạo guard
// nest g guard auth
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const request = context.switchToHttp().getRequest();
const token = request.headers['authorization'];
return token === 'valid-token';
}
}
// Áp dụng guard trong controller
import { Controller, Get, UseGuards } from '@nestjs/common';
@Controller('secure')
export class SecureController {
@Get()
@UseGuards(AuthGuard)
getSecureData() {
return { message: 'Access granted' };
}
}
3. Kiến thức trọng tâm
Guard chạy sau middleware nhưng trước interceptor và controller.
Guard trả về true cho phép request đi tiếp, false sẽ chặn request.
Rất phù hợp cho xử lý xác thực (authentication) và phân quyền (authorization).
4. Bài tập nhanh
Tạo guard roleGuard kiểm tra quyền của user từ header x-role.
Chỉ cho phép role = admin truy cập route.
Áp dụng guard cho route DELETE /products/:id.
5. Kết luận
Guard giúp kiểm soát truy cập một cách rõ ràng và tập trung. Đây là một trong những cơ chế quan trọng nhất khi xây dựng hệ thống xác thực và phân quyền trong NestJS.