• Ana Sayfa
  • NestJS
  • NestJS: req.user Kargaşasına Custom Decorator ile Son Verin
NestJS Custom Decorator

NestJS: req.user Kargaşasına Custom Decorator ile Son Verin.

Custom Decorator'lara Giriş

NestJS uygulamalarında Authentication (Kimlik Doğrulama) katmanını geçtikten sonra, controller tarafında oturum açmış kullanıcının bilgilerine erişmek sık yapılan bir işlemdir. Genellikle bunu request nesnesi üzerinden yaparız. Ancak sürekli @Request() req yazıp req.user çağırmak hem tip güvenliğini (type safety) zayıflatır hem de kod tekrarına yol açar.

"Custom Param Decorator'lar sayesinde controller katmanını framework detaylarından soyutlayabilir, temiz ve test edilebilir bir kod tabanına kavuşabilirsiniz."

Musluhan Çavuş

1. Sorun: Klasik Yaklaşım

Standart bir Guard kullanımı sonrası controller genellikle şöyle görünür:

@UseGuards(JwtAuthGuard)
@Get('profile')
getProfile(@Request() req) {
  // req.user tip güvenli değildir, 'any' dönebilir.
  return req.user; 
}

Bu yöntem çalışır, ancak NestJS'in soyutlama gücünü kullanmaz ve Express/Fastify platformuna bağımlılık yaratır.

2. Çözüm: Custom Decorator Oluşturma

createParamDecorator fonksiyonunu kullanarak, Execution Context üzerinden request nesnesine ulaşıp sadece ilgili veriyi (user) döndüren bir dekoratör yazalım.

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

export const CurrentUser = createParamDecorator(
  (data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    return request.user;
  },
);

3. Kullanım: Temiz ve Tip Güvenli

Artık Controller katmanında req nesnesini tamamen unutabiliriz:

@Controller('users')
export class UsersController {
  @UseGuards(JwtAuthGuard)
  @Get('profile')
  getProfile(@CurrentUser() user: UserEntity) {
    console.log(user.email);
    return user;
  }
}
Related Topics :
Kategori: NestJS & Backend
ÖNCEKİ YAZI