Integrating Next-Auth for authentication is relatively straightforward, but it's important to note that Next-Auth is a library, not an authentication service provider. This means you'll need to integrate it with a service like GitHub, Google, Facebook, or manage your own user database.
Getting Started with GitHub Integration:
Create OAuth App: Go to your GitHub Developer Settings, navigate to OAuth Apps, and register a new application. Specify "http://localhost:3000/" as the Homepage URL and "http://localhost:3000/api/auth/callback/github" as the Authorization callback URL.
Obtain Tokens: Once registered, you'll receive a client ID and secret key. Store these in your Next.js app's environment variables (GITHUB_ID and GITHUB_SECRET).
Install Next-Auth: Add Next-Auth to your project by running npm add next-auth.
Create API Callback: Define an API route (/app/api/auth/[...nextauth]/route.ts) to handle GitHub OAuth authentication. Here's a sample implementation:
import NextAuth from "next-auth";
import GitHubProvider from "next-auth/providers/github";
export const options = {
providers: [
GitHubProvider({
clientId: process.env.GITHUB_ID ?? "",
clientSecret: process.env.GITHUB_SECRET ?? "",
}),
],
};
export default NextAuth(options);
Implementing Sign-in Flow:
Create AuthButton Component: Build a UI component to handle sign-in/sign-out actions. Here's a basic example:
import { signIn, signOut, useSession } from "next-auth/react";
export default function AuthButton() {
const { data: session } = useSession();
if (session) {
return (
<>
{session?.user?.name} <br />
<button onClick={() => signOut()}>Sign out</button>
</>
);
}
return (
<>
Not signed in <br />
<button onClick={() => signIn()}>Sign in</button>
</>
);
}
Integrate AuthButton: Add the AuthButton component to your layout, allowing users to sign in/out easily.
Conclusion: By following these steps, you can integrate Next-Auth for authentication in your Next.js application seamlessly. Remember to customize the authentication providers and UI components according to your project requirements.