-
[Next.js] Iron Session에 대해 알아보자FrontEnd/Next.js 2022. 12. 7. 21:25
// 참고: sinclairr 님의 벨로그
1. Iron-Session 이란?
- 암호화된 쿠키를 이용하는 Node.js stateless session utilituy 이다.
- 기본적으론 JWT와 흡사합지만, 토큰 정보에 대해 암호화,복호화를 한다는 점이 다름
2. 동작방식
- user(Browser)가 server에 req을 보냄
- server 에서 해당 정보를 암호화한 cookie를 만듬
- 이후 user에게 res를 보낼떄 cookie를 같이 보냄
- user는 암호화된 cookie를 가지고, 이후 req에 이 cookie가 같이 보내짐
- server는 cookie를 받게 되면 복호화를 진행 후 정보를 활용함
=> 쿠키를 만들고, 유저에게 보내는 작업을 직접 할 필요 x . Iron Session에서 제공하는 helper Fn을 사용하면 됨
3. 설치
yarn add iron-session // npm i iron-session
4. withIronSessionAPIRoute ( feat. findUser() )
- DB에서 원하는 id를 가진 user를 가져오는 법은 findUser(id) 가 있다.
import { NextApiRequest, NextApiResponse } from "next"; export default async function handler(req: NextApiRequest, res: NextApiResponse) { const id = 1; const foundUser = findUser(id); res.json({ ok: true, foundUser }); }
- id가 아닌 현재 로그인 되어있는 user의 정보를 얻어오는 법은?
- 이를 위해서는 req에서 id를 가져오는 작업이 필요함
- 이 행위는 withIronSessionAPIRoute()를 통해 가능
import { NextApiRequest, NextApiResponse } from "next"; import { withIronSessionApiRoute } from "iron-session/next"; //여기 next 붙여야함 import { IronSessionOptions } from "iron-session"; const options: IronSessionOptions = { cookieName: "reservation-site", password: "VERYYLONGPASSWORDS1ab1323898esda345q6781!", }; async function handler(req: NextApiRequest,res: NextApiResponse) { const id = req.session.user.id; //req의 쿠키에 user가 저장되어 있는 경우, 이렇게 정보 가져올수있음 const foundUser = await findUser(id); res.json({ ok: true, foundUser }); } export default withIronSessionApiRoute(handler, options);
- handler : 기존 API 핸들러 함수
- options : IronSessionOptions 타입 객체 , 쿠키 및 패스워드 정보 갖고 있음
- 쿠키: 브라우저에 저장되는 쿠키의 이름
- 패스워드: 32이상의 비밀번호. 암호화/복호화에 사용됨
- 위와 같이 작성하면 타입스크립트는 session내의 데이터에 대한 정보를 몰라서 에러를 띄운다.
declare module "iron-session" { interface IronSessionData { user?: { id: number; }; } }
5. 세션에 데이터를 저장하는 법( Save() )
if (req.method === "POST") { const { body: { userId }, } = req; // Assign value req.session.user = { id: +userId, }; // Save at a session await req.session.save(); res.json({ ok: true }); }
- POST 요청이 들어왔을때 userId를 세션에 값을 할당한 후 save()함수를 실행시킨다.
- 이렇게만 하면 세션에 저장 및 이후 암호화된다잉
'FrontEnd > Next.js' 카테고리의 다른 글
[Next.js] SWR을 통해 캐시 데이터 가져오기 (0) 2022.12.12 [Next.js] 환경변수 타입 지정 및 자동완성(.env) (0) 2022.12.11 [Next.js] API Route에 대해 ( NextApiRequest ,NextApiResponse ) (0) 2022.12.09 [Next.js] 환경 변수 사용하기 ( + 깃에 올리지 않는 법) (0) 2022.12.05 next.js 의 장단점 (0) 2022.11.25