Next.js 15 Fullstack Web Apps · レッスン

NextAuth.jsの統合

さまざまなプロバイダーと認証情報ベースのログインに対応する、簡単な認証のためのNextAuth.jsをセットアップします。

レッスン 1/412 ステップ

「NextAuth.jsの統合」はCoddyKit上の無料Next.js 15 Fullstack Web Appsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応の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!

無料で開始

AI チューターと学ぶ TypeScript — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
12
レッスン
48

よくある質問

「NextAuth.jsの統合」レッスンは無料ですか?

はい。「NextAuth.jsの統合」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応の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を演習し、24時間対応の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に戻る