Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ReactContextAPI
- socketIO
- state전역관리
- 인스타그램앱만들기
- pyqt5
- 비디오전송
- 페이스북개발자
- APIroutes
- 앱비밀번호
- reactjs
- 넥스트js
- nextjs
- 플래닛스케일
- 리액트
- mysqlworkbench
- 노드메일러
- PlanetScale
- 인스타그램API
- nodemailer
- expressjs
- Nodejs
- 웹소켓
- 비디오스트리밍
- API루트
- ReactQuill
- 쿠키관리
- 넥스트JS13
- nextjs13
- pyinstaller
- next js
Archives
- Today
- Total
Timpossible history
[Next JS] Middleware 이용하여 cookie, token 관리 본문
- Middleware란?
- Middleware 사용사례
- Middleware 설정
- Middleware로 쿠키 관리하기
Middleware란?
미들웨어(Middleware)는 애플리케이션에서 서버에 들어오거나 나가는 req와 res 사이에 실행되는 코드이다. 미들웨어는 주로 req가 서버에서 routing될 때 res를 클라이언트에 보내기 전에 수정하거나 검사하는 데 사용된다.
Node.js로 서버를 구성할 때에도 정말 자주 쓰이고 서버에 들어오는 모든 요청(request)들을 검사하고 인증할 수 있기 때문에 서버 보안 부분에 있어서도 아주 효율적인 로직이라고 볼 수 있다.
Middleware 사용사례
- 봇 탐지 및 접근 제한
- 리다이렉트(rewrite)
- 쿠키(token)를 통한 인증
Middleware 설정
미들웨어는 함수로 표현하며 Node.js에서는 req, res를 함수의 인자로 가지지만 Next 에서는 다르다.
Next에서 미들웨어는 request(res)만 인자로 가지며, 요청에 따른 응답으로 NextResponse 객체를 리턴한다. 이 NextResponse에 내가 하고 싶은 작업을 해주면 된다.
middleware.js 또는 middleware.ts를 루트에 생성한다.
//Next 공식 웹사이트 Docs
import { NextResponse } from 'next/server'
// 함수 안에서 await 함수를 쓰면 async function middleware로 쓸 수 있음
export function middleware(request) {
// request를 받아서 처리한 후 NextResponse 객체 리턴
return NextResponse.redirect(new URL('/home', request.url))
}
// matcher를 지정해줌으로 어느 경로에서 미들웨어를 동작시킬 것인지 정할 수 있음.
export const config = {
matcher: '/about/:path*',
}
// 여러 경로를 지정해줄 수 있음
export const config = {
matcher: ['/about/:path*', '/dashboard/:path*'],
}
// 정규표현식으로 경로를 지정해줄 수 있음
// api route, _next/static(정적 파일), _next/image(최적화 이미지 파일), favicon.ico(favicon 파일) 등.
export const config = {
matcher: [
/*
* Match all request paths except for the ones starting with:
* - api (API routes)
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico (favicon file)
*/
'/((?!api|_next/static|_next/image|favicon.ico).*)',
],
}
Middleware로 쿠키 관리하기
간단하게 쿠키에 auth라는 쿠키가 있는지 체크하고 있으면 request를 다음으로 진행시키고, 쿠키가 없으면 login 페이지로 넘어가는 미들웨어를 만들어본다.
import { NextResponse } from 'next/server'
export function middleware(request) {
// 로그인 작업을 한 후 auth라는 키와 임의의 값 'abcd'을 가진 쿠키를 발급했다고 가정.
// 모든 request의 header에는 쿠키 값이 함께 들어오기 때문에 미들웨어에서 검사할 수 있음
let cookie = request.cookies.get('auth')
console.log(cookie) // => { name: 'auth', value: 'abcd', Path: '/' }
const allCookies = request.cookies.getAll()
console.log(allCookies) // => [{ name: 'auth', value: 'abcd' }]
// auth 쿠키가 없으면 login 페이지로 이동
if(!request.cookies.has('auth')){
return NextResponse.redirect('/login')
}
// auth 쿠키 존재하면 request api 처리
return NextResponse.next()
}
인스타그램이나 트위터 같은 sns 어플리케이션 같이 로그인 하지 않으면 사용을 못하는 어플리케이션을 만드는데 이용할 수 있는 미들웨어라고 볼 수 있다.
예시는 아주 간단하게 쿠키 검사하는 것을 적어놓은 것이고, 실제로는 쿠키에 로그인 정보를 담아서 관리를 해야하기 때문에 더 복잡해지겠지만 정교하게 사용해야 한다.
'프론트엔드 > Next JS' 카테고리의 다른 글
[Next JS] Next 13에서 동적으로 메타데이터 적용하여 SEO 최적화 시키기 (0) | 2024.02.12 |
---|---|
[Next JS] Next 13에서 API routes 만들기(feat. 동적 라우팅) (0) | 2024.02.11 |
[Next JS] Nodemailer로 메일 보낼 때 커스터마이징하기 (0) | 2024.01.30 |
[Next JS] Cloudflare에 NextJS 웹사이트 배포하기 (0) | 2024.01.08 |
Next JS로 Nodemailer 사용하여 이메일 보내기 기능 구현 (0) | 2023.12.30 |