일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리스트랜더링
- 오공완
- React
- 오공완 #리액트 공부 #React
- map()에는 key값이 필요
- 리액트
- 클래스 추가하기 #특정 url 클래스 추가 #사이트 접속시 클래스 추가 #오공완 #javascript
- Today
- Total
new_bird-hyun
Next.js에서 OAuth + RBAC(역할 기반 접근 제어) 구현하기 본문
- OAuth(Open Authorization)를 활용한 로그인 처리
- NextAuth.js와 RBAC(역할 기반 접근 제어)를 결합하여 사용자 권한 관리
- Google, GitHub 등의 OAuth 제공자와 사용자 역할 설정 방법
npm install next-auth
pages/api/auth/[...nextauth].js (OAuth + RBAC 설정)
import NextAuth from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
import GitHubProvider from 'next-auth/providers/github';
export default NextAuth({
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
GitHubProvider({
clientId: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
}),
],
callbacks: {
async session({ session, token }) {
session.user.role = token.role || 'user';
return session;
},
async jwt({ token, user }) {
if (user) {
token.role = user.email === 'admin@example.com' ? 'admin' : 'user';
}
return token;
},
},
secret: process.env.NEXTAUTH_SECRET,
});
pages/index.js (OAuth 로그인 UI)
import { signIn, signOut, useSession } from 'next-auth/react';
export default function Home() {
const { data: session } = useSession();
if (session) {
return (
<div>
<h1>환영합니다, {session.user.name}!</h1>
<p>이메일: {session.user.email}</p>
<p>역할: {session.user.role}</p>
<button onClick={() => signOut()}>로그아웃</button>
{session.user.role === 'admin' && <p>관리자 전용 콘텐츠</p>}
</div>
);
}
return (
<div>
<h1>OAuth 로그인</h1>
<button onClick={() => signIn('google')}>Google 로그인</button>
<button onClick={() => signIn('github')}>GitHub 로그인</button>
</div>
);
}
환경 변수 설정 파일: .env.local
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
NEXTAUTH_SECRET=your-random-secret
NextAuth.js를 활용하면 OAuth 로그인과 RBAC를 간편하게 구현 가능
'코딩 공부' 카테고리의 다른 글
Next.js에서 Zustand와 SWR을 활용한 실시간 데이터 동기화 전략 (0) | 2025.03.14 |
---|---|
Zustand와 서버 컴포넌트(Server Components)를 결합하여 상태 관리 최적화하기 (0) | 2025.03.12 |
Next.js에서 미들웨어를 활용한 역할 기반 접근 제어(RBAC) 구현 (0) | 2025.03.08 |
Next.js에서 사용자 역할(Role-Based Access Control, RBAC)을 활용한 권한 관리 (0) | 2025.03.04 |
Next.js에서 서버 액션(Server Actions)과 JWT 인증 구현하기 (0) | 2025.03.03 |