authorization-함수형 프로그래밍 로직 구성 및 재사용성의 적극 활용

yonghee·2022년 6월 14일
0

baechu-market

목록 보기
24/32

지금 까지 iron-session 을 통해 쿠키를 암호화 하고 그 값을 통해 user의 정보를 찾는것 까지는 구현했다.

인증 되지 않은 user 관리

인증되지 않은 사용자의 경우 페이지 접근을 할 수 없게 해야 한다. 지금 웹사이트의 컨셉은 로그인이 되지 않을 경우 웹사이트 체험이 불가하게 구성하였기 때문이다. handler()가 실행 되기 이전에 보호를 통해 에러가 나는 것을 사전에 방지를 해줄 필요가 있다.

//me.tsx
import { withIronSessionApiRoute } from "iron-session/next";
import { NextApiRequest, NextApiResponse } from "next";
import withHandler, { ResponseType } from "@libs/server/withHandler";
import client from "@libs/server/client";

async function handler(
  req: NextApiRequest,
  res: NextApiResponse<ResponseType>
) {
  console.log(req.session.user); 
  //브라우저가 받은 쿠키값을 확인해본다. 
    --> user의 id값 까지 잘 나오는 상태이다 이 id 값으로 user의 정보를 가져올수 있는 것이다.
  const profile = await client.user.findUnique({
    where: { id: req.session.user?.id },
//where 안에는 id가 req.session.user.id인 user를 찾도록 만든다. 
            
  });
  res.json({
    ok: true,
    profile,
   //마지막으로 user 데이터 값을 찾고 데이터 출력
  });
}

export default withApiSession(withHandler("GET", Handler));

Handler() + 유저의 로그인 상태 여부 체크

Handelr() 함수는 user에 관한 api 요청에서 계속해서 재사용 되며 적극 활용 되고 있다. 한번 만든 로직을 계속 재사용 함으로서 효율성을 극대화 하는것 계속 지향하고 싶은 부분이다. 이미 Handler()을 통해 "GET POST DELETE" 요청에 따라 handler()이 실행 되지 않도록 사전에 방지 해주고 있다. 이거 Handler()에 유저의 로글인 상태 여부 체크까지 가능하도록 추가적인 로직을 구성해보도록 한다.

//Handler.ts
import { NextApiRequest, NextApiResponse } from "next";

export default function Handler(
  method: "GET" | "POST" | "DELETE",
   //어떤 타입이 들어 올지 타입스크립트 유니온 타입을 지정하였다.
  fn: (req: NextApiRequest, res: NextApiResponse) => void,
   isPrivate: boolean // 추가
) {
  return async function (req: NextApiRequest, res: NextApiResponse): Promise<any> {
    if (req.method !== "POST") {
      return res.status(405).end();
    }
    if (isPrivate && !req.session.user) {
    	return res.status(401).json({ok:false});
    } //추가
    try {
      await fn(req, res);
    } catch (error) {
      console.log(error);
      return res.status(500).json({ error });
    }
  };
}
profile
필요할 때 남기는 날것의 기록 공간

0개의 댓글