Node.js

21.11.06 functional programming

슈팅스타제제 2021. 11. 7. 23:09

 

functional programming template

>>example

//함수 A를 호출
//함수 B를 인자로 받아서 함수 C를 호출
//함수 B를 반환
const A = (B) => (C) => {
	return B
}

 

>>protectedResolver

export const protectedResolver = (ourResolver) => (root, args, context, info) => {
  if(!context.loggedInUser){
    return {
    ok: false, 
    error: 'Please log in to perform this action',
    }
  }
  return ourResolver(root, args, context, info)
}

>>export const protectedResolver = (ourResolver)

export default {
  Mutation: {
    editProfile: protectedResolver(resolverFn),
  },
}

>>resolverFn

const resolverFn = async (
  _, 
  {firstName, lastName, username, email, password: newPassword, bio, avatar}, 
  {loggedInUser}
) => {
  ///...
}

 

>>getUser 

토큰 정보를 가지고 와서 jwt가 유효한지 확인하고

유저를 찾아서 있으면: 유저 데이터를 넘겨준다. 

없으면: null 데이터를 넘겨준다.

export const getUser = async (token) => {
  try{
  //토큰 정보가 없다면 null 반환
    if(!token){
        return null
    }
    //*jwt.verify(): 토큰 유효성을 검사해준다. 
    //process.env.SECRET_KEY = bRNw19587FibBD8EZvXsxpd58WxCDN1T
    const {id} = await jwt.verify(token, process.env.SECRET_KEY)
    //prisma client에서 user table에서 jwt 정보의 id와 비교하여 일치하는 것을 user에 담는다. 
    const user = await client.user.findUnique({where: {id}})	
    //user 데이터가 존재하면 user를 반환
    if(user){
    	return user
    }else{
    	return null
    }
  }catch{
  	return null
  }
}

 

*jwt.verify(token, secretOrPublicKey, [option, callback])

token 인자에 들어가는 값은 JWT string 값이다. 

secretOrPublicKey는 RSA와 ECDSA 알고리즘으로 공개키를 암호화한 string 값이다.

이는 공개키 또는 비밀키를 연동하는 함수가 될 수도 있다. 

https://randomkeygen.com/ 에서 codeigniter encryption key를 선택했다. 

 

RandomKeygen - The Secure Password & Keygen Generator

RandomKeygen is a free mobile-friendly tool that offers a randomly generated keys and passwords you can use to secure any application, service or device.

randomkeygen.com

 

>>