DEV Community

MustafaLSailor
MustafaLSailor

Posted on

nest.js Guard

Guard'lar, NestJS'de bir route handler'ın çalıştırılıp çalıştırılmayacağını belirlemek için kullanılan bir yapıdır. Guard'lar genellikle kimlik doğrulama ve yetkilendirme işlemleri için kullanılır, ancak her türlü özel erişim kontrolü için de kullanılabilirler.

Bir Guard, canActivate adında bir metod içeren bir sınıftır. Bu metod, bir ExecutionContext nesnesi alır ve boolean bir değer veya boolean değer döndüren bir Promise veya Observable döndürür. Eğer canActivate true döndürürse, route handler çalıştırılır. Eğer false döndürürse, route handler engellenir.

İşte basit bir Guard örneği:

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';

@Injectable()
export class MyGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const request = context.switchToHttp().getRequest();
    // Some custom authentication logic here
    return true;
  }
}
Enter fullscreen mode Exit fullscreen mode

Bu Guard'ı bir controller'da kullanmak için @UseGuards() decorator'ını kullanabilirsiniz:

@UseGuards(MyGuard)
@Controller('my-route')
export class MyController {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

Bu şekilde, MyGuard'ın canActivate metodu her seferinde my-route route'una bir istek geldiğinde çalıştırılır.

Guard'lar ayrıca global olarak da ayarlanabilirler. Bu durumda, Guard tüm uygulama için geçerli olur:

async function bootstrap() {
  const app = await NestFactory.create(ApplicationModule);
  app.useGlobalGuards(new MyGuard());
  await app.listen(3000);
}
bootstrap();
Enter fullscreen mode Exit fullscreen mode

Bu şekilde, MyGuard tüm uygulama için geçerli olacaktır ve her controller'da otomatik olarak uygulanacaktır.

Top comments (0)