JS
[Nest JS] 인증된 유저만 게시글 보고쓰기 구현
* 보드모듈에서 Auth모듈 import@Module({ imports: [ TypeOrmModule.forFeature([BoardRepository]), AuthModule ], controllers: [BoardsController], providers: [BoardsService, BoardRepository],})export class BoardsModule {} * 보드 컨트롤러에서 컨트롤러 레벨@ 선언 => 모든 함수에 영향가도록AuthGuard() 임에 주의!@Controller('boards')@UseGuards(AuthGuard())export class BoardsController {
[Nest JS] 커스텀 데코레이터(@) => 바로 user 가져오기
* GetUser 커스텀 데코레이터 생성import { createParamDecorator, ExecutionContext } from "@nestjs/common";import { User } from "./user.entity";export const GetUser = createParamDecorator((data, ctx: ExecutionContext): User =>{ const req = ctx.switchToHttp().getRequest(); return req.user;}) * 컨트롤러@Post('/test')@UseGuards(AuthGuard())test(@GetUser() user : User){ console.log('user',user);}@GetUser에서 우리가 만든..
[Nest JS] Passport , jwt => 토큰인증후 유저정보 가져오기 / @UseGuard 미들웨어
우리는 4번까지했음토큰생성후, 클라는 요청을 보낼때 토큰을 같이보내는데, 이 토큰을 검증하는 작업을 할것임! npm install @types/passport-jwt --save * jwt-strategy 구현import { PassportStrategy } from "@nestjs/passport";import { Injectable, UnauthorizedException } from "@nestjs/common";import { ExtractJwt, Strategy } from "passport-jwt";import { InjectRepository } from "@nestjs/typeorm";import { UserRepository } from "./user.repository";import ..
[Nest JS] JWT => accessToken 발급
* 개념 * 구현필요한 모듈들 설치하기npm install @nestjs/jwt @nestjs/passport passport passport-jwt --save@nestjs/jwt - nestjs에서 jwt를 사용하기 위해 필요한 모듈 @nestjs/passport - nestjs에서 passport를 사용하기 위해 필요한 모듈 passport - passport 모듈 passport-jwt - jwt 모듈 npm install @nestjs/jwt @nestjs/passport passport passport-jwt --save * 모듈에 import => app에서 사용가능토록@Module({ imports:[ JwtModule.register({ secret:'Secret123..
[Nest JS] 로그인 구현 / bcrypt.compare salt issue
* 서비스async signIn(authCredentialDto : AuthCredentialsDto) { const {username, password} = authCredentialDto; const user = await this.userRepository.findOneBy({username}); //username으로 user 찾고 //입력받은 비밀번호랑 저장된 비밀번호랑 비교 if(user && (await bcrypt.compare(password, user.password))){ return 'login success' } else{ throw new UnauthorizedException('login failed'); }}📌 bcrypt.compareDB에 실제 ..
[Nest JS] 비밀번호 암호화 구현
npm install bcryptjs --save * salt => 같은비밀번호를 입력해도 다른 해시값이 저장되도록import * as bcrypt from 'bcryptjs'@Injectable()export class UserRepository extends Repository{ ... async createUser(authCredentialsDto : AuthCredentialsDto){ const {username, password} = authCredentialsDto; const salt = await bcrypt.genSalt(); const hashedPassword = await bcrypt.hash(password, salt); const user = this...
[Nest JS] id 중복검사 구현
* 엔티티에서 @Unique 딸깍import { BaseEntity, Column, Entity, PrimaryGeneratedColumn, Unique } from "typeorm";@Entity()@Unique(['username'])export class User extends BaseEntity{ @PrimaryGeneratedColumn() id: number; @Column() username: string; @Column() password: string;} * 원인 : 에러가 그냥 컨트롤러 레벨로 가서 500에러를 던져버림해결 : 에러를 try catch로 잡아줘야함리포지토리에서 save를 try-catch 안에 넣어주면됨.@Injectable()export class UserR..
[Nest JS] 유효성체크 with class-validator, 파이프
* dto 에서 사용import { IsString, Matches, MaxLength, MinLength } from "class-validator";export class AuthCredentialsDto{ @IsString() @MinLength(4) @MaxLength(20) username : string; @IsString() @MinLength(4) @MaxLength(20) @Matches(/^[a-zA-Z0-9]*$/,{message : 'password only accepts english and number'}); password : string;} * 컨트롤러에 파이프 넣어줘야 제대로 작동함@Post('/signup')signUp(@Body(ValidationPipe..