Inflearn brand logo image

인프런 커뮤니티 질문&답변

cbmja님의 프로필 이미지
cbmja

작성한 질문수

인프런 클론코딩 Part 1: Next.js와 NestJS로 시작하는 실전 프로젝트

[BE] 백엔드 Auth Guard 구현 시작. Auth Guard로 유저 아이디 가져오는 부분 작업

The edge runtime does not support Node.js 'crypto' module.

해결된 질문

작성

·

128

0

[auth][error] JWTSessionError: Read more at https://errors.authjs.dev#jwtsessionerror

[auth][cause]: Error: The edge runtime does not support Node.js 'crypto' module.

Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime

at Object.get (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\_b7b28d92._.js:62:41)

at C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\node_modules__pnpm_e56295b8._.js:8637:62

at getSecret (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\node_modules__pnpm_e56295b8._.js:8620:20)

at push.[project]/node_modules/.pnpm/jsonwebtoken@9.0.2/node_modules/jsonwebtoken/verify.js [middleware-edge] (ecmascript).module.exports (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\node_modules__pnpm_e56295b8._.js:8623:12)

at Object.decode (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\[root-of-the-server]__273b5c62._.js:135:233)

at session (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\0253f_@auth_core_77718842._.js:4516:39)

at AuthInternal (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\0253f_@auth_core_77718842._.js:5123:269)

at async Auth (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\0253f_@auth_core_77718842._.js:5379:34)

at async handleAuth (C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\node_modules__pnpm_e56295b8._.js:3885:29)

at async C:\project\whatsForLunch\basic-app\frontend\.next\server\edge\chunks\_b7b28d92._.js:12505:20

[auth][details]: {}

GET / 200 in 137ms


auth.ts에
jwt: { encode: async ({ token, secret }) => { return jwt.sign(token as jwt.JwtPayload, secret as string); }, decode: async ({ token, secret }) => { return jwt.verify(token as string, secret as string) as JWT; }, },


이 부분을 추가한 이후부터
The edge runtime does not support Node.js 'crypto' module.
이 에러가 발생하는데 해결이 어렵네요.. 코드는 노션이랑 강의 보고 다 비교해 봤는데 드른 부분은 없었스빈다..



 

답변 5

0

저도 같은 에러네요

로펀님의 프로필 이미지
로펀
지식공유자

모든 파일과 폴더 일치하는지, 라이브러리 설치항목과 버전 일치하는지 더블체크 부탁드립니다 🙂

질문자분의 이슈는 [...nextauth] 폴더 위치가 잘못된 이슈였습니다.

0

로펀님의 프로필 이미지
로펀
지식공유자

슬랙으로 답변 드렸습니다. 모든 파일과 폴더 일치하는지 확인 한번 부탁드립니다! 🙏

0

저도 cbmja님과 똑같은 에러가 나는데요.

강의 소스 체크 부탁 드립니다.

0

cbmja님의 프로필 이미지
cbmja
질문자

frontend/auth.ts 부분을
edge 런타임에서도 동작 가능하게 수정했습니다.

import {SignJWT, jwtVerify, JWTPayload} from 'jose';
.
.
.
jwt: { encode: async ({ token, secret }) => { const encodedSecret = new TextEncoder().encode(secret as string); return await new SignJWT(token as JWTPayload) .setProtectedHeader({ alg: 'HS256' }) .setIssuedAt() .setExpirationTime('1h') .sign(encodedSecret); }, decode: async ({ token, secret }) => { const encodedSecret = new TextEncoder().encode(secret as string); const { payload } = await jwtVerify(token!, encodedSecret); return payload as JWT; }, },


문제는 해결하긴 했는데 왜 이런 문제가 발생한 것인지를 모르겠네요..일단은 jsonwebtoken 말고 jose 사용했습니다.

0

안녕하세요, 인프런 AI 인턴입니다. cbmja님.

Next.js의 Edge Runtime 환경에서 발생하는 에러에 대해 설명해 드리겠습니다. 이 문제는 주로 Edge 환경에서의 Node.js 모듈 지원 제한으로 인해 발생하는데, 특히 crypto 모듈과 관련된 오류가 자주 보고됩니다. 기본적으로 Edge 환경에서는 일부 Node.js 모듈이 지원되지 않기 때문입니다.

문제 요약:
- “The edge runtime does not support Node.js ‘crypto’ module.” 오류는 Edge 컴퓨팅 환경에서 crypto 모듈과 같은 특정 Node.js 모듈을 사용할 수 없다는 것을 의미합니다.

해결 방법:
1. Node.js 환경으로 전환:
- crypto 모듈을 사용하는 코드는 Edge 환경이 아닌 일반 Node.js 환경에서 실행되도록 조정해야 합니다. 이는 Edge 환경 대신 서버 환경에서 JWT를 처리하도록 코드를 변경하는 것을 의미합니다.

  1. 대체 방법 사용:

    • Edge 환경에서도 사용할 수 있는 대체 라이브러리나 API를 사용하는 방법도 고려해볼 수 있습니다. WebCrypto API가 이에 대한 대안이 될 수 있습니다.
  2. 구성 변경:

    • Next.js의 API Routes를 사용하여 Edge 환경이 아닌 서버 환경에서 JWT 인코딩과 디코딩 작업을 수행하도록 코드베이스를 변경합니다.

이 주제에 대해 구체적인 해결 방법과 예제 코드는 아래 게시물에서도 확인하실 수 있습니다:
- Edge 환경에서 JWT 사용 문제 해결하기

위의 링크에서 더 많은 정보와 예제를 확인하셔서 코드 수정을 진행하시면 도움이 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cbmja님의 프로필 이미지
cbmja

작성한 질문수

질문하기