암호화는 가능하지만 복호화는 불가능한 것으로 단방향 암호화라고 함
회원 가입 시 입력한 비밀번호를 DB에 저장할 때 많이 사용!
비밀번호 찾기 시 단방향 암호화라면 새로운 비밀번호를 생성하고 양방향 암호화를 사용하였다면 비밀번호 변경이 가능(앞의 경우가 더 안전함)
hashing을 하기위해서는 brcypt
라는 라이브러리 이용
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { CreateUserInput } from './dto/createUser.input';
import { User } from './entities/users.entity';
import { UserService } from './user.service';
import * as bcrypt from 'bcrypt';
@Resolver()
export class UserResolver {
constructor(
private readonly userService: UserService,
) {}
//회원 생성(회원가입)
@Mutation(() => User)
async createUser(
@Args('userInput') userInput: CreateUserInput,
) {
const hashedPassword = await bcrypt.hash(userInput.password, 10);// bcrypt를 이용해 hashing
userInput.password = hashedPassword;
return this.userService.create({ userInput });
}
// db저장 형태 예시) 비밀번호: 1234 (hashing)=> $2b$10$t0HaFZK2CXamx7gvEj/y5OQ8F0hn6C4LynVyssr4j6WIW1tlm/Xoy
// 로그인 시 암호화된 비밀번호와 비교 방법
// bcrypt의 compare기능 이용
const isAuth = await bcrypt.compare(password, user.password);
if (!isAuth) throw new UnprocessableEntityException('비밀번호 불일치!!');