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