diff --git a/src/app/(board)/board/create/components/BoardNameForm.tsx b/src/app/(board)/board/create/components/BoardNameForm.tsx index 7eaa32e..b57d613 100644 --- a/src/app/(board)/board/create/components/BoardNameForm.tsx +++ b/src/app/(board)/board/create/components/BoardNameForm.tsx @@ -1,10 +1,10 @@ 'use client' -import TextInput from '@/components/TextInput' -import { ReactNode, useState } from 'react' import Button from '@/components/Button' +import TextInput from '@/components/TextInput' import { postBoard } from '@/lib' import { useRouter } from 'next/navigation' +import { ReactNode, useState } from 'react' const MAX_BOARD_NAME_LENGTH = 15 diff --git a/src/app/(onboarding)/signup/components/NicknameForm.tsx b/src/app/(onboarding)/signup/components/NicknameForm.tsx index 69ea9b3..43ea7e8 100644 --- a/src/app/(onboarding)/signup/components/NicknameForm.tsx +++ b/src/app/(onboarding)/signup/components/NicknameForm.tsx @@ -2,6 +2,7 @@ import Button from '@/components/Button' import NicknameInput from '@/components/TextInput/NicknameInput' +import { changeNickname } from '@/lib' import { useSession } from 'next-auth/react' import { useRouter } from 'next/navigation' import SketchIcon from 'public/icons/sketchIcons-1.svg' @@ -18,6 +19,7 @@ const NicknameForm = () => { update({ name: nickname, }) + await changeNickname(nickname) router.push('/signup/complete') } diff --git a/src/app/mypage/profileEdit/components/NicknameForm.tsx b/src/app/mypage/profileEdit/components/NicknameForm.tsx index a8ab987..f1db913 100644 --- a/src/app/mypage/profileEdit/components/NicknameForm.tsx +++ b/src/app/mypage/profileEdit/components/NicknameForm.tsx @@ -4,6 +4,7 @@ import Button from '@/components/Button' import { useSession } from 'next-auth/react' import { ReactNode, useState } from 'react' import NicknameInput from '@/components/TextInput/NicknameInput' +import { changeNickname } from '@/lib' import Title from './Title' const NicknameForm = ({ children }: { children: ReactNode }) => { @@ -15,6 +16,7 @@ const NicknameForm = ({ children }: { children: ReactNode }) => { update({ name: newName, }) + await changeNickname(newName) } return ( diff --git a/src/auth.ts b/src/auth.ts index 5d803b7..ed384f1 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -2,10 +2,10 @@ import NextAuth from 'next-auth' import Kakao from 'next-auth/providers/kakao' -import { login } from './lib/api' -import { changeNickname } from './lib/api/user' +import { login, refreshAT } from './lib/api/auth' -export const { handlers, signIn, signOut, auth } = NextAuth({ +/* eslint-disable-next-line @typescript-eslint/naming-convention */ +export const { handlers, signIn, signOut, auth, unstable_update } = NextAuth({ providers: [ Kakao({ clientId: process.env.AUTH_KAKAO_ID, @@ -23,16 +23,18 @@ export const { handlers, signIn, signOut, auth } = NextAuth({ if (account && user) { try { // 신규 유저인지 확인, polabo 백에서 토큰 발급 - const { newUser, nickName, accessToken } = await login({ - email: user.email!, - nickName: user.name!, - birthDt: '2024-08-11', // TODO: 기획 대기 - gender: 'F', // TODO: 기획 대기 - }) - + const { newUser, nickName, accessToken, refreshToken, expiredDate } = + await login({ + email: user.email!, + nickName: user.name!, + birthDt: '2024-08-11', // TODO: 기획 대기 + gender: 'F', // TODO: 기획 대기 + }) user.name = nickName user.newUser = newUser user.accessToken = accessToken + user.refreshToken = refreshToken + user.expiredDate = expiredDate } catch (e) { console.log('error', e) return false @@ -41,30 +43,45 @@ export const { handlers, signIn, signOut, auth } = NextAuth({ return true }, - async jwt({ token, user, trigger, session }) { + async jwt({ token, user, account, trigger, session }) { if (trigger === 'update' && session?.name) { const { name } = session - - token.name = name // client update - await changeNickname(name) // server update + token.name = name + } + if (trigger === 'update' && session?.accessToken) { + token.accessToken = session.accessToken + token.refreshToken = session.refreshToken + token.expiredDate = session.expiredDate } - if (user) { + if (user && account) { + // first time login return { ...token, - accessToken: user.accessToken, newUser: user.newUser, + accessToken: user.accessToken, + refreshToken: user.refreshToken, + expiredDate: user.expiredDate, + user, } } - return token + if (Date.now() < new Date(token.expiredDate).getTime()) { + // AT not expired + return token + } + // AT expired - update token + const newToken = await refreshAT(token.refreshToken) + return { ...token, ...newToken } }, async session({ session, token }) { - return { - ...session, - accessToken: token.accessToken, - newUser: token.newUser, + if (token) { + session.accessToken = token.accessToken + session.refreshToken = token.refreshToken + session.expiredDate = token.expiredDate + session.newUser = token.newUser } + return session }, }, }) diff --git a/src/components/HamburgerMenu/Drawer.tsx b/src/components/HamburgerMenu/Drawer.tsx index 022e655..b485e3f 100644 --- a/src/components/HamburgerMenu/Drawer.tsx +++ b/src/components/HamburgerMenu/Drawer.tsx @@ -87,7 +87,7 @@ const Drawer = ({ children, isOpen, onClose }: DrawerProps) => { return isOpen ? ReactDOM.createPortal( -