728x90
๋ฐ์ํ
Client API | NextAuth.js
The NextAuth.js client library makes it easy to interact with sessions from React applications.
next-auth.js.org
๐ก getSession() ํจ์ ํธ์ถ ์ ์ ๋ฌธ์์ ๊ฐ์ด ์ค์ ํ์์๋ 2๊ฐ์ง ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ Session ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์๋ฌ์์ด ๋ถ๋ฌ์ค๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํฉ๋๋ค.
1. api/auth/session 400 ์๋ฌ ( GET http://localhost:3000/api/auth/session 400)
2. ClientFetchError: Unexpected token '<', "<!DOCTYPE </aside>
SessionProvider ์ค์
MetaData ์ฌ์ฉ์ ์ํด SessionProvider๋ ์ปดํฌ๋ํธ๋ก ์์ฑ
// RootLayout layout.tsx
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode
}>) {
return (
<html lang="en">
<body className={inter.className}>
<Session>{children}</Session>
</body>
</html>
)
}
// Session.tsx
'use client'
import React from 'react'
import { SessionProvider } from 'next-auth/react'
function Session({ children }: { children: React.ReactNode }) {
return <SessionProvider>{children}</SessionProvider>
}
export default Session
Next Auth ์ค์
// auth.ts
export const { handlers, auth, signIn, signOut } = NextAuth({
...authConfig,
})
export const authConfig = {
jwt: async ({ user, token, account }) => {
if (user) {
token.uid = user.id
}
return token
},
session: async ({ session, token }) => {
if (session?.user) {
if (token.sub != null) {
session.user.id = token.sub
}
}
return session
},
},
session: {
strategy: 'jwt',
},
} satisfies NextAuthConfig
ENV ์ค์
# `openssl rand -base64 32`
NEXTAUTH_SECRET=Aa0Mv3ckdtLyMRjSBU9PLDNPCUY0FN94w1iPOq1rANw=
AUTH_URL=http://localhost:3000/api/auth
[…nextauth] ์ค์
ํด๋น ํ์ผ์ ์์ฑํ์ง ์๋๋ค๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
- api/auth/session 400 ์๋ฌ ( GET http://localhost:3000/api/auth/session 400)
- ClientFetchError: Unexpected token '<', "<!DOCTYPE </aside>
[...nextauth]๋ ๋์ ๊ฒฝ๋ก๋ก, NextAuth.js์ ๊ด๋ จ๋ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ์ค์ ๋๋ฉฐ getSession()์ด ์ธ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด /api/auth/session์ GET ์์ฒญํ๊ธฐ์ ํด๋น ์ค์ ์ ๊ธฐ๋ณธ ์๋ํฌ์ธํธ์์ ํน์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค
// app/api/auth/[...nextauth]/route.ts
import { handlers } from '@/auth'
export const { GET, POST } = handlers
Session ํ์ธ
'use client'
import { useSession } from 'next-auth/react'
export default function ProfileForm() {
const { data: session, status, update } = useSession()
if (!session?.user) return null
return (<div>{session.user.id}</div>)
}
728x90
๋ฐ์ํ
'NEXT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
NEXT JS + Google Analytics Connect Setting (0) | 2024.08.07 |
---|---|
Parallel Routes Modal Difficult Error (0) | 2024.07.25 |
NEXT 14 NEXT-AUTH 5 middleware.ts not working (0) | 2024.07.11 |
NextJS Prisma PostgreSQL ์ฐ๊ฒฐ ๋ฐ Migrate (0) | 2024.07.09 |
next-themes Hydration failed Error (0) | 2024.05.31 |