GraphQl 프로젝트 - 2

원종서·2021년 9월 29일
1

graphql

목록 보기
2/5

회원가입 구현

$ npx prisma init

prisma 초기화.


// in schema.prisma

model User {
  id Int @id @default(autoincrement())
  username String @unique
  email String @unique
  name String
  location String
  password String
  avatarURL String?
  githubUsername String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

$npx prisma migrate dev --preview-feature

prisma 를 통해 데이터베이스에 저장.

User typeDef

// in user.typedefs.js

export default gql`
    type User {
        id: String!
        username: String!
        email: String!
        name: String!
        location: String!
        avatarURL: String
        githubUsername: String
        createdAt: String!
        updatedAt: String!
    }
`;

prisma 에서는 기본이 require이고 gql에서는 기본이 optaional 이다.

CreateAccount

CreateAccount typeDefs

// in createAccount.typedefs.js

import {gql} from "apollo-server-core";

export default gql`
    type createAccountResult {
        ok: Boolean!
        error: String
    }
    type Mutation {
        createAccount(
            username: String!
            email: String!
            name: String!
            location: String!
            avatarURL: String
            githubUsername: String
            password: String!
        ): createAccountResult!
    }

`;

CreateAccount resolvers

export default {
    Mutation: {
        createAccount: (
            _,
            {username, email, name, location, avatarURL, githubUsername,password}
        ) => {
            console.log(
                username,
                email,
                name,
                location,
                avatarURL,
                githubUsername
            );
        },
    },
};

User type과 createAccount type, resolver을 다 만들고 실행시켜보면

이러한 에러가 뜬다, Query 타입이 필수적으로 필요한가 싶어

    type Query {
        seeUser(username: String!): createAccountResult
    }
   //##################################
     Query: {
        seeUser: (_, {username}) => {
            return;
        },
    },

의 코드를 넣어주었고 , 정상 작동 하는 것을 볼 수 있었다

Mutation 을 보내고 로그가 잘 찍히는 것을 볼 수 있었다.

비밀번호 Hash

$npm i bcrypt

비밀번호 해쉬화 하기 전에 prisma에 유니크 값으로 저장한 email과 username이 중복인지 확인해야한다.

 const existingUser = await client.user.findFirst({
                where: {
                    OR: [{email}, {username}],
                },
            });

import bcrypt from "bcrypt";
const hashedPWD = await bcrypt.hash(password, 10);

bcrypt 패키지가 너무 잘 되어 있어서 우리는 bcrypt.hash(해쉬할 데이터, SORT) 만 써주면 된다

SORT 는 해쉬화를 몇번 할 지다, 3이면 입력한 비밀번호를 해쉬화 하고 해쉬화 된 것을 또 해쉬하는 것이다.

시뮬레이션

Mutation 을 보내주고

$ npx prisma studio

studio 를 켜서 보면

해쉬화 한 비밀번호까지 잘 저장된 것을 볼 수 있다 :)

Git link

0개의 댓글