JS/Nest.js

    [Nest JS] JWT => accessToken 발급

    [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

    [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] 비밀번호 암호화 구현

    [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 중복검사 구현

    [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, 파이프

    [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..

    [Nest JS] 회원가입 구현 / TypeError: this.userRepository.createUser is not a function 해결

    [Nest JS] 회원가입 구현 / TypeError: this.userRepository.createUser is not a function 해결

    * dto 생성export class AuthCredentialsDto{ username : string; password : string;}* 리포지토리에서 db 접근 메소드 구현@Injectable()export class UserRepository extends Repository{ constructor(dataSource: DataSource) { super(User, dataSource.createEntityManager()); } async createUser(authCredentialsDto : AuthCredentialsDto){ const {username, password} = authCredentialsDto; const user = this.create({u..

    [Nest JS] 인증 구현 준비 (컨트롤러, 서비스, 리포지토리 생성)

    [Nest JS] 인증 구현 준비 (컨트롤러, 서비스, 리포지토리 생성)

    * user table 생성import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from "typeorm";@Entity()export class User extends BaseEntity{ @PrimaryGeneratedColumn() id: number; @Column() username: string; @Column() password: string;}* repository 생성import { Injectable } from "@nestjs/common";import { DataSource, Repository } from "typeorm";import { User } from "./user.entity";@Injectable()e..

    [Nest JS] 모든 게시글 조회

    [Nest JS] 모든 게시글 조회

    * 서비스async getAllBoards(){ return this.boardRepository.find(); //매개변수없음 -> 모든것 가져옴}* 컨트롤러@Get()getAllBoard(){ return this.boardsService.getAllBoards();}