πŸ‘©‍πŸ’» λ°±μ—”λ“œ(Back-End)/Nest js

[Nest JS 둜 CRUD κ²Œμ‹œνŒ λ§Œλ“€κΈ°] (29) μ»€μŠ€ν…€ λ°μ½”λ ˆμ΄ν„° μƒμ„±ν•˜κΈ°

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 6. 9. 11:16
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” John Ahn μ˜ 유튜브λ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

=> λ”°λΌν•˜λ©΄μ„œ λ°°μš°λŠ” NestJS

 

🧸 μ»€μŠ€ν…€ λ°μ½”λ ˆμ΄ν„° μƒμ„±ν•˜κΈ° 

πŸŽ€ get-decorator.ts

import { ExecutionContext, createParamDecorator } from "@nestjs/common";
import { User } from "./user.entity";

// μ»€μŠ€ν…€ λ°μ½”λ ˆμ΄ν„° 생성함
// req.user κ°€ μ•„λ‹Œ user νŒŒλΌλ§ˆν‹°λ‘œ λ°”λ‘œ μœ μ € 객체 κ°–κ³  였기
export const GetUser = createParamDecorator((data, ctx: ExecutionContext): User => {
    const req = ctx.switchToHttp().getRequest();
    return req.user;

})

 

πŸŽ€ auth.controller.ts

import { Body, Controller, Post, Req, UseGuards, ValidationPipe } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthCredentialsDto } from './dto/auth-credential.dto';
import { AuthGuard } from '@nestjs/passport';
import { GetUser } from './get-decorator';
import { User } from './user.entity';

@Controller('auth')
export class AuthController {
    constructor( private authService: AuthService) {}
    
    // localhost:3000/auth/signUp
    @Post("/signup")
    // ValidationPipe : μš”μ²­μ΄ μ»¨νŠΈλ‘€λŸ¬μ— μžˆλŠ” ν•Έλ“€λŸ¬λ‘œ 듀어왔을 λ•Œ Dto 에 μžˆλŠ” μœ νš¨μ„± 쑰건에 맞게 체크
    signUp(@Body(ValidationPipe) authCredentialsDto: AuthCredentialsDto): Promise<void> {
        return this.authService.signUp(authCredentialsDto);
    }
    
    // 둜그인 κΈ°λŠ₯ κ΅¬ν˜„ν•˜κΈ°
    @Post("/signin")
    signIn(@Body(ValidationPipe) authCredentialsDto: AuthCredentialsDto): Promise<{accessToken: string}> {
        return this.authService.signIn(authCredentialsDto);
    }

    // TEST
    @Post("/authTest")
    // 인증 미듀웨어
    // μ§€μ •λœ 경둜둜 톡과할 수 μžˆλŠ” μ‚¬λžŒκ³Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μ‚¬λžŒμ„ μ„œλ²„μ— μ•Œλ €μ€Œ
    @UseGuards(AuthGuard())
    test(@GetUser() user: User) {
        console.log("user", user);
    }

}
728x90
λ°˜μ‘ν˜•