해결된 질문
작성
·
128
0
[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
0
0
0
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를 처리하도록 코드를 변경하는 것을 의미합니다.
대체 방법 사용:
구성 변경:
이 주제에 대해 구체적인 해결 방법과 예제 코드는 아래 게시물에서도 확인하실 수 있습니다:
- Edge 환경에서 JWT 사용 문제 해결하기
위의 링크에서 더 많은 정보와 예제를 확인하셔서 코드 수정을 진행하시면 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
모든 파일과 폴더 일치하는지, 라이브러리 설치항목과 버전 일치하는지 더블체크 부탁드립니다 🙂
질문자분의 이슈는 [...nextauth] 폴더 위치가 잘못된 이슈였습니다.