0Pricing
Next.js 15 Fullstack Web Apps · 课时

集成 NextAuth.js

设置 NextAuth.js,通过各种身份验证提供商和基于凭据的登录轻松实现身份验证。

集成 NextAuth.js 是 CoddyKit 上的免费 Next.js 15 Fullstack Web Apps 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Next.js 15 Fullstack Web Apps 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Next.js 15 Fullstack Web Apps 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

What is NextAuth.js?

Welcome to integrating NextAuth.js! This powerful library simplifies authentication in Next.js applications, making it easy to add login functionality.

NextAuth.js supports various authentication strategies, from social logins (like Google, GitHub) to custom credential-based systems, all with minimal setup.

It handles session management, JWTs, and secure callbacks, abstracting away much of the complexity of building a secure authentication system.

Installing NextAuth.js

First, let's add NextAuth.js to your Next.js project. Open your terminal in your project's root directory and run the following command:

npm install next-auth

Setting up the Auth API Route

NextAuth.js needs a special API route to handle all authentication requests. For the App Router, create a file at app/api/auth/[...nextauth]/route.js.

This file exports a handler that NextAuth.js uses to process sign-in, sign-out, and session requests. Initially, we'll set it up with no providers.

import NextAuth from "next-auth";

export const authOptions = {
  providers: [], // Your authentication providers go here
};

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };

Adding a Google OAuth Provider

Let's integrate Google as an OAuth provider. You'll need to install the specific provider package and then add it to your authOptions.

Make sure you've set up a Google OAuth client ID and secret in the Google Cloud Console.

import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";

// Install: npm install @next-auth/google

export const authOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
};

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };

Securing Credentials (.env.local)

It's crucial to keep your API keys and secrets secure. Store them in a .env.local file in your project's root directory.

You'll need a NEXTAUTH_SECRET (a long, random string) for signing tokens and encrypting cookies, along with your Google credentials.

GOOGLE_CLIENT_ID=your_google_client_id_here
GOOGLE_CLIENT_SECRET=your_google_client_secret_here
NEXTAUTH_SECRET=a_very_long_and_random_string_for_security

Client Session Provider

To make session data available to your client components, you need to wrap your application with a SessionProvider. For the App Router, create a client component like app/providers.jsx:

"use client";

import { SessionProvider } from "next-auth/react";

export default function AuthProvider({ children }) {
  return <SessionProvider>{children}</SessionProvider>;
}

Integrating AuthProvider

Now, import and use your custom AuthProvider in your root layout file (app/layout.js). This ensures that all components within your application can access the session context.

import AuthProvider from "./providers"; // Adjust path as needed

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <AuthProvider>
          {children}
        </AuthProvider>
      </body>
    </html>
  );
}

Accessing Session Data (useSession)

In any client component, you can use the useSession hook from next-auth/react to access the current user's session data.

It provides the session object (if a user is logged in) and a status (e.g., 'loading', 'authenticated', 'unauthenticated').

"use client";

import { useSession } from "next-auth/react";

export default function UserInfo() {
  const { data: session, status } = useSession();

  if (status === "loading") {
    return <p>Loading user info...</p>;
  }

  if (session) {
    return (
      <div>
        <p>Welcome, {session.user.name}!</p>
        <p>Email: {session.user.email}</p>
      </div>
    );
  }

  return <p>Please sign in.</p>;
}

Authentication UI Actions

To allow users to sign in and out, NextAuth.js provides the signIn and signOut functions. You can import these and use them with buttons or links.

signIn() can take a provider ID (e.g., 'google') to specify the login method.

"use client";

import { useSession, signIn, signOut } from "next-auth/react";

export default function AuthButtons() {
  const { data: session } = useSession();

  if (session) {
    return (
      <button onClick={() => signOut()} style={{ padding: '10px' }}>
        Sign Out
      </button>
    );
  }
  return (
    <button onClick={() => signIn("google")} style={{ padding: '10px' }}>
      Sign In with Google
    </button>
  );
}

Beyond OAuth: Credentials Provider

While OAuth providers are convenient, NextAuth.js also supports a CredentialsProvider for custom username/password login forms.

This requires you to implement your own authorize function to validate user input against your database, offering full control over the login process.

// ... in your authOptions.providers array
CredentialsProvider({
  name: "Credentials",
  credentials: {
    email: { label: "Email", type: "email" },
    password: { label: "Password", type: "password" }
  },
  async authorize(credentials, req) {
    // Here you'd query your database to validate credentials
    // If valid, return a user object; otherwise, return null
    // Example: const user = await getUserByEmailAndPassword(credentials.email, credentials.password);
    // if (user) { return user; } else { return null; }
    return null; // Placeholder
  }
})

NextAuth.js Setup Quiz

You've learned the core steps to integrate NextAuth.js. Let's quickly check your understanding.

Recap: NextAuth.js Integration

Great job! You've learned how to integrate NextAuth.js into your Next.js application:

  • Installed the next-auth package.
  • Set up the dynamic API route for authentication (app/api/auth/[...nextauth]/route.js).
  • Configured a social OAuth provider like Google.
  • Secured credentials using .env.local.
  • Wrapped your app with SessionProvider for client-side session access.
  • Used useSession to get user data and implemented signIn/signOut functions.

NextAuth.js significantly streamlines the process of adding robust authentication to your Next.js projects!

常见问题解答

「集成 NextAuth.js」课时是免费的吗?

是的 — 「集成 NextAuth.js」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Next.js 15 Fullstack Web Apps 课程的其余内容,请升级到 CoddyKit PRO。 Next.js 15 Fullstack Web Apps 课程共包含 4 节课。

「集成 NextAuth.js」这节课中我会学到什么?

设置 NextAuth.js,通过各种身份验证提供商和基于凭据的登录轻松实现身份验证。 你通过在浏览器中直接运行的动手代码来练习 Next.js 15 Fullstack Web Apps,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Next.js 15 Fullstack Web Apps 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Next.js 15 Fullstack Web Apps 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「集成 NextAuth.js」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Next.js 15 Fullstack Web Apps 课中编写并运行代码吗?

能。每节 Next.js 15 Fullstack Web Apps 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 集成 NextAuth.js
  2. 会话管理与 JWT
  3. 中间件与访问控制
  4. 基于角色的访问控制(RBAC)
← 返回 Next.js 15 Fullstack Web Apps