[오늘의 공부]/Next.js
[오늘의 Next.js] middleware에서 jwt토큰방식의 session조회하고 싶을때
돈워리비햅삐
2024. 6. 26. 18:51
next.js 14에서 진행중 문제 봉착...!
"next": "14.2.4",//package-lock.json
getToken()을 통해 사용자가 로그인중인지 아닌지 확인을 원했음
(middleware.js)
import { getToken } from 'next-auth/jwt';
import { getServerSession } from 'next-auth/react';
import { getSession } from 'next-auth/react';
import { NextResponse } from 'next/server';
export async function middleware(request) {
const session = await getToken({ req: request });
//const session = await getServerSession({ req: request });
//const session = await getSession({ req: request });
console.log('로그인중인지 ', session);
}
위와 같이 작성했는데 로그인중일때도, 아닐때도 모두 "로그인중인지 null"이 터미널에 찍혔다...
getToken()도 getSession()도 둘다 같은 현상... null...
그래서 찾아보니 아래와 같은 issue를 발견했다.
Getting token in middleware doesn't work with authorization header request · Issue #4042 · nextauthjs/next-auth
Environment System: OS: macOS 11.6 CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz Memory: 169.62 MB / 16.00 GB Shell: 3.2.57 - /bin/bash Binaries: Node: 16.13.0 - /usr/local/bin/node Yarn: 1...
github.com
그래서 위 링크의 도움을 얻어 아래와 같이 수정했더니 정상적으로 조회가 된다!!

import { getToken } from 'next-auth/jwt';
import { getServerSession } from 'next-auth/react';
import { getSession } from 'next-auth/react';
import { NextResponse, NextRequest } from 'next/server';
const secret = process.env.myJWTsecret; //authOptions의 secret으로 작성한 것
export async function middleware(req) { //req로 작성
const session = await getToken({ req, secret }); //getToken의 인자로 넘기기
//const session = await getServerSession({ req });
//const session = await getSession({ req });
console.log('로그인중인지 ', session);
}
//ts파일이면 아래와 같이 type설정
export async function middleware(req: NextRequest) {...}
위와 같이 작성하면 로그인 중일때는 session으로 사용자의 정보를 확인해 볼 수있고,
로그아웃상태일때는 session이 null로 조회가 된다 .
