[오늘의 공부]/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로 조회가 된다 .