• TOC

정리할 내용

로그인을 하는 방법으로 비밀번호 대신 이메일로 key를 보내주면 그것을 치고 들어오는 방식으로 작성을 할 것입니다. 오늘은 랜덤한 단어를 생성해서 User 속성인 loginSecret에 넣어주기 까지 진행해보려고 합니다.


랜덤 단어 만들기

랜덤 단어 사이트에서 형용사와 명사를 만들 수 있습니다.
.js파일을 만들때 주의할 점은 api디렉토리 안에 만들면 안된다는 것입니다. 왜냐하면 server.js에서 resolver를 api에 있는 js를 읽는 방식을 사용했기 때문입니다. 이것을 주의해서 파일을 만들어줍니다.

  • 스크롤된 부분 모든줄 커서 :

  • utils.js

    형용사와 명사를 import해주고 난수를 발생시켜주는 함수를 export 해줍니다. 이 함수는 requestSecret.js resolver에서 사용할 예정입니다.

    import {Adjectives,Nouns} from './words';
    
    export const generateSecret = () =>{
        const randomNumber = Math.floor(Math.random()*Adjectives.length);
        return  `${Adjectives[randomNumber]} ${Nouns[randomNumber]}`;
    }
    
  • requestSecret.js

    generateSecret 함수와 prisma를 호출해줍니다. prisma를 불러오는 이유는 prisma의 model을 사용하기 위해서는 client로 배포가 되어있어야하고 배포한 client를 graphql에서 사용하는 것이기 때문입니다.

    export default를 하는 이유 : server.js에서 resolvers와 type을 path.join 해서 fileLoader하기 때문에 export 가 필요합니다.
    (_,args) 의 이유 : 첫번째 인자는 사용하지 않고 제가 필요한 arguments는 두번째 인자로 들어오기 때문에 args로 받고 email변수로 해 넣어서 사용합니다.

    prisma 문법은 아직 익숙하지 않아서 자주 사용해보는 방법밖에 없을 것 같습니다.

    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;
                }
    
            }
        }
    }
    

주의할 점

  1. resolvers를 merge하기로 한 경로에는 다른 .js파일을 두어서는 안됩니다.
  2. prisma를 수정하였을 경우 npm run-script prisma(제 명령어 기준)해줘야 합니다. (graphql에서 prisma-client를 사용하기위해 )