[prismagram] [BackEnd] 7. Create Account - Part2

업데이트:

모든 내용은 MacOS Catalina 기준으로 작성되었습니다

await, async, _, args 등 JavaScript내용은 따로 정리하겠습니다.

1. 비밀값 요청기능

사용자를 만들었으면 비밀값을 요청하고 확인하는 기능을 구현합니다.

주로 사용하는 비밀값은 형용사+명사를 조합해서 만듭니다. ex) violent tank

User 폴더에 requestSecret 폴더를 만듭니다.

graphql 파일에 requestSecret Mutation을 추가합니다. 이때 Boolean 타입을 반환합니다.

type Mutation {
	requestSecret(): Boolean!
}

함수의 인자로는 Sting 타입의 이메일이 필요합니다.

type Mutation {
	requestSecret(email: String!): Boolean!
}

js 파일에는 async 함수로 requestSecret 함수를 만듭니다.
첫번째 인자는 필요없고, 두번째 인자는 args라고 하겠습니다.
args에서 email을 가져옵니다.

export default {
	Mutation: {
		requestSecret: async (_, args) => {
			const { email } = args;
		}
	}
};

api 폴더 바깥에 비밀값을 생성할 함수를 만듭니다.

src/utils.js 만든다음 단어들을 저장할 words.js를 생성합니다.

export const adjectives = []
export const nouns = []

utils.js에는 값를 생성할 함수를 만들어주고 단어를 import 합니다.

import { adjectives, nouns } from "./words"

export const genertateSecret = () => {
    const randomNumber = 
}

이때 무작위로 단어를 생성하는 함수를 테스트해보겠습니다.
크롬 콘솔에서 단어들을 생성하고 Math.random 함수를 실행힙니다.
Math.random은 0에서 1사이의 무작위 수를 생성합니다.
그럼 0과 adjectives의 길이 사이의 임의의 수를 만들어줍니다.

Math.random() * adjectives.length

이때 소숫점을 반내림하는 Math.floor를 추가하여 정수를 만들겠습니다.

Math.floor(Math.random() * adjectives.length)

위에서 만든 math 함수를 utils에 추가하고 랜덤한 숫자를 반환받도록 하겠습니다.

import { adjectives, nouns } from './words';

export const generateSecret = () => {
	const randomNumber = Math.floor(Math.random() * adjectives.length);
	return `${adjectives[randomNumber]} ${nouns[randomNumber]}`;
};

2. 함수 검증하기

지금까지 만든 함수를 활용하여 지정된 이메일로 비밀값을 받아보겠습니다.

import { generateSecret } from '../../../utils';
import { prisma } from '../../../../generated/prisma-client';

export default {
	Mutation: {
		requestSecret: async (_, args) => {
			const { email } = args;
			const loginSecret = generateSecret();
			console.log(loginSecret);
			try {
                await prisma.updateUser({ data: { loginSecret }, where: { email } });
                return true;
            } catch {
                return false;
            }
		}
	}
};

이렇게 하고 localhost에서 mutation을 실행시키면

mutation {
  requestSecret(email:"k1a11220@naver.com")
}

false 에러가 나오는데 이건 datamodel에서 loginSecret을 !(필수)로 했기 때문입니다.

prisma와 graphql 모두 바꿔줍니다.

type User {
	loginSecret: String!
}

type User {
	loginSecret: String
}

그 다음 mutation을 실행시키면 ture값이 반환되고 어드민 페이지에 들어가서 살펴보면

admin

loginSecret값이 들어와있습니다.

댓글남기기