Add Authentication to Upload Files (Next.js + Better Auth + Prisma)
- 인증 기반 파일 업로드 제한: 기존 Next.js 파일 업로드/삭제 기능에 인증을 추가하여 로그인한 사용자만 파일을 업로드할 수 있도록 제한합니다. 🔒
- Better Auth 도입: 사용자 로그인/로그아웃 기능을 간편하게 구현하기 위해 Better Auth 라이브러리를 활용합니다. 🔑
- 환경 변수 설정의 중요성: Better Auth(시크릿, GitHub 자격 증명, 공개 URL) 및 데이터베이스(PostgreSQL) 설정을 위한 환경 변수 구성이 필수적입니다. ⚙️
- GitHub OAuth 앱 연동: GitHub 개발자 설정에서 OAuth 앱을 등록하고
CLIENT_ID 및 CLIENT_SECRET을 발급받아 인증에 사용합니다. 🐙
- Prisma 스키마 자동 확장:
npx better-auth-cli generate 명령어를 통해 Prisma 스키마에 User, Session, Account, Verification 모델을 자동으로 추가합니다. 📊
- 업로드 모델에 사용자 연결:
Upload 모델에 userId 필드를 추가하여 새로운 User 모델과의 관계를 설정하고, 업로드된 파일이 특정 사용자와 연결되도록 합니다. 🔗
- 클라이언트 측 인증 관리:
better-auth/react에서 제공하는 useSession, signIn, signOut 훅을 사용하여 프론트엔드에서 사용자 세션 및 인증 작업을 관리합니다. 🌐
- 서버 측 세션 검증 미들웨어: 파일 업로드 API에 미들웨어를 구현하여
AuthAPI.getSession(req.headers)를 통해 서버에서 사용자 세션을 확인하고, 인증되지 않은 요청을 차단합니다. 💻
- 사용자 경험을 위한 UI/UX: 로그인 상태에 따라 로그인 버튼, 업로드 안내 메시지, 드롭존 비활성화, 커서 변경 등 시각적 피드백을 제공하여 사용자 경험을 향상시킵니다. 🎨
- Next.js 이미지 도메인 설정: GitHub 아바타와 같은 외부 이미지를 안전하게 로드하기 위해
next.config.ts 파일에 images.domains 설정을 추가해야 합니다. 🖼️