본문 바로가기
Apollo GraphQL Prisma

인스타그램 클론코딩 BACKEND 만들기 #11 - Login

by 정정훈의 아날로그 2021. 6. 17.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    login: async (_, { username, password }) => {
      const user = await client.user.findFirst({ where: { username } });
      if (!user) {
        return {
          ok: false,
          error: "User not found.",
        };
      }
      const passwordOk = await bcrypt.compare(password, user.password);
      if (!passwordOk) {
        return {
          ok: false,
          error: "Incorrect password.",
        };
      }
      const token = await jwt.sign({ id: user.id }, process.env.SECRET_KEY);
     return {
         ok: true,
         token,
     };
    },
cs

Check 01 - 유저가 있는지 찾기

  • line 2 ~ line 8 : username 으로 user를 찾아본 후 user가 없다면 line 5 ~ line 6 을 return 한다.

 

Check 02 - 비밀번호가 맞는지 체크

  • line 9 ~ line 15 : bcrypt.compare 로 비밀번호를 체크한다.
  • bcrypt.compare 의 첫번째 인자 password 는 login 할때 입력한 password 를 의미한다.
  • bcrypt.compare 의 두번째 인자 user.password 는 login 할때 입력한 username 을 가지고있는 user 의 password를 의미한다.
  • bcrypt.compare 는 두 인자를 비교한 후 맞으면 true, 틀리면 false 를 return 한다.
  • 입력한 비밀번호와 user 의 비밀번호가 다를 경우 line 12 ~ line 13 을 return 한다.

 

Check 03 - jsonwebtoken

https://helloinyong.tistory.com/111

 

[2019.05.10] JWT-Token 방식의 정보 인증 [사용법]

사용자가 로그인 후, 유저 정보를 cookie,Session 방식이 아닌 token 방식으로 안전하게 관리하는 방법이 있다. # token 방식의 특징 사용자 정보를 일일히 서버의 세션에 저장하지 않고, 사용자의 로컬

helloinyong.tistory.com

  • 설치법 : npm install jsonwebtoken

사용법

1
2
3
import jwt from "jsonwebtoken";
 
const token = await jwt.sign({ id: user.id }, process.env.SECRET_KEY);
cs