6. Persist, Protect Login

김종민·2022년 4월 22일
0

insta-backend

목록 보기
6/37

1. getUser (for token)

login mutation으로 return한 token으로 getUser
즉, getuser 함수로 user를 return 해 준다.

await jwt.verify(token, process.env.SECRET_KEY) 를 통해 user의 id를 확인.
await prisma.user.findUnique({where:id}) 를 통해 user 정보를 확인.
if(user){ return user } user가 존재하면 user를 return해줌.

2. in server.js //

context안에 loggedInUser로 모든 resolvers에 user보내줌,

require('dotenv').config()
import { ApolloServer } from 'apollo-server-express'
import { graphqlUploadExpress } from 'graphql-upload'
import schema from './schema'
import { getUser } from './users/users.util'
import express from 'express'

const PORT = process.env.PORT

const startServer = async () => {
  const server = new ApolloServer({
    schema,
    context: async ({ req }) => {
      return {
        loggedInUser: await getUser(req.headers.token),
      }
    },
  })

  await server.start()
  const app = express()
  app.use(graphqlUploadExpress())
  app.use('/static', express.static('uploads'))
  server.applyMiddleware({ app })
  await new Promise((func) => app.listen({ port: PORT }, func))
}

console.log(`🚀  Server ready at http://loaclhost:${PORT}`)
startServer()

const server = new ApolloServer({
context: async({req}) => {
return { loggedInUser: await gerUser(req.headers.token)

  1. getUser함수에 req.headers.token으로 token 보내줘서 user를 return받음.
    loggedInUser에 user를 return받아 모든 resolvers에 context로 보내줌,

3. ProtectedResolver

in user.util.js에 protectedResolver callBack함수 만듬.
ourResolver=> resolvers함수를 받아서 root, args, context, info 를
넣어서 return

!!check
if(!context.loggedInUser) 가 없으면 return{ok :fasle, error}
context.loggedInUser가 존재하면 return ourResolver에 root, args, context, info를
넣어서 return 함.

4. Apply protectedResolver

example. editProfile.resolvers.js

resolverFn으로 editProfile function만듬

resolverFn을
protectedResolver안에 넣고, 이름은 editProfile로 해서 export 해줌.
즉, editProfile function은 loggedInUser가 있어야만 실행 가능해짐.

profile
코딩하는초딩쌤

0개의 댓글