Sungtt

[Next.js@13] jwt 라이브러리, jsonwebtoken 대신 jose 본문

React

[Next.js@13] jwt 라이브러리, jsonwebtoken 대신 jose

sungtt 2022. 12. 27. 08:14

[Next.js@13] jsonwebtoken 대신 jose

 

Next.js에서 jwt를 생성할 때 늘 쓰던 jsonwebtoken 모듈을 시도했다.

결과는 오류! 공식 문서에 따르면 Edge 런타임은 모든 Node.js API를 지원하진 않는다고 알려준다.

error - Error: The edge runtime does not support Node.js 'buffer' module.

 

jose

그래서 대체 모듈을 찾다가 jose 라는 모듈을 찾았다. 해당 모듈은 종속성없이 작동한다.

내부에 각 모듈들은 독립적이기에 트리쉐이킹도 가능하다고한다.

지원 목록을 보면 맨 아래에 당당하게 Vercel이 있다.

현재 jwt 생성과 복호화를 jose를 통해 모듈화시켜서 사용하고있다.

import { JWTPayload, jwtVerify, SignJWT } from 'jose';

export const createJoseAccessToken = async (id: string): Promise<string> => {
  //시크릿키 생성
  const secret = new TextEncoder().encode(process.env.SECRET_TOKEN);
  //알고리즘 선택
  const alg = process.env.JWT_ALG as string;
  const jwt = await new SignJWT({ id }).setProtectedHeader({ alg }).setIssuedAt().setExpirationTime('1s').sign(secret);

  return jwt;
};

export const verifyJoseToken = async (token: string): Promise<JWTPayload | null> => {
  const secret = new TextEncoder().encode(process.env.SECRET_TOKEN);
  try {
    const { payload } = await jwtVerify(token, secret);
    return payload;
  } catch (err) {
    return null;
  }
};

export default createJoseAccessToken;

 

Next에서 jsonwebtoken 사용으로 헤매고있다면 이 모듈도 추천..

 

- npm

https://www.npmjs.com/package/jose?activeTab=readme 

 

jose

'JSON Web Almost Everything' - JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes. Latest version: 4.11.1, last published: a month ago. Start using jose in your project by running `npm i

www.npmjs.com

 

Comments