Example Code
Get started with NextAuth.js​
The example code below describes how to add authentication to a Next.js app.
The easiest way to get started is to clone the example app and follow the instructions in README.md. You can try out a live demo at next-auth-example.vercel.app
Add API route​
To add NextAuth.js to a project create a file called [...nextauth].js
in pages/api/auth
.
Read more about how to add authentication providers.
import NextAuth from "next-auth"
import Providers from "next-auth/providers"
export default NextAuth({
// Configure one or more authentication providers
providers: [
Providers.GitHub({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
// ...add more providers here
],
// A database is optional, but required to persist accounts in a database
database: process.env.DATABASE_URL,
})
All requests to /api/auth/*
(signin, callback, signout, etc) will automatically be handed by NextAuth.js.
See the options documentation for how to configure providers, databases and other options.
Add React Hook​
The useSession()
React Hook in the NextAuth.js client is the easiest way to check if someone is signed in.
import { signIn, signOut, useSession } from "next-auth/client"
export default function Page() {
const [session, loading] = useSession()
return (
<>
{!session && (
<>
Not signed in <br />
<button onClick={() => signIn()}>Sign in</button>
</>
)}
{session && (
<>
Signed in as {session.user.email} <br />
<button onClick={() => signOut()}>Sign out</button>
</>
)}
</>
)
}
You can use the useSession
hook from anywhere in your application (e.g. in a header component).
Add session state​
To allow session state to be shared between pages - which improves performance, reduces network traffic and avoids component state changes while rendering - you can use the NextAuth.js Provider in pages/_app.js
.
import { Provider } from "next-auth/client"
export default function App({ Component, pageProps }) {
return (
<Provider session={pageProps.session}>
<Component {...pageProps} />
</Provider>
)
}
Check out the client documentation to see how you can improve the user experience and page performance by using the NextAuth.js client.
Deploying to production​
When deploying your site set the NEXTAUTH_URL
environment variable to the canonical URL of the website.
NEXTAUTH_URL=https://example.com