跳至内容
从 NextAuth.js v4 迁移?阅读 我们的迁移指南.
入门适配器Firebase Firestore

Firebase 适配器

使用 Firebase Admin SDKFirestore.

资源

设置

安装

npm install @auth/firebase-adapter firebase-admin

环境变量

// Auth via Service Account File
GOOGLE_APPLICATION_CREDENTIALS
 
// Auth via key values
AUTH_FIREBASE_PROJECT_ID
AUTH_FIREBASE_CLIENT_EMAIL
AUTH_FIREBASE_PRIVATE_KEY

配置

auth.ts
import NextAuth from "next-auth"
import { FirestoreAdapter } from "@auth/firebase-adapter"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [],
  adapter: FirestoreAdapter(),
})

身份验证

服务帐号文件

首先,创建一个 Firebase 项目并生成一个服务帐号密钥。访问:https://console.firebase.google.com/u/0/project/{project-id}/settings/serviceaccounts/adminsdk(用您的项目的 ID 替换 {project-id}

  1. 下载服务帐号密钥并将其保存在您的项目中。(确保将文件添加到您的 .gitignore 中!)
  2. GOOGLE_APPLICATION_CREDENTIALS 添加到您的环境变量中,并将其指向服务帐号密钥文件。
  3. 适配器将自动获取环境变量并使用它来验证 Firebase Admin SDK。您不需要向适配器传递任何额外的身份验证选项。

服务帐号值

  1. 将服务帐号密钥下载到临时位置(不要提交此文件!)。
  2. 将以下环境变量添加到您的项目中
    a. AUTH_FIREBASE_PROJECT_ID
    b. AUTH_FIREBASE_CLIENT_EMAIL
    c. AUTH_FIREBASE_PRIVATE_KEY
./auth.ts
import NextAuth from "next-auth"
import { FirestoreAdapter } from "@auth/firebase-adapter"
import { cert } from "firebase-admin/app"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: FirestoreAdapter({
    credential: cert({
      projectId: process.env.AUTH_FIREBASE_PROJECT_ID,
      clientEmail: process.env.AUTH_FIREBASE_CLIENT_EMAIL,
      privateKey: process.env.AUTH_FIREBASE_PRIVATE_KEY,
    }),
  }),
})

使用现有的 Firestore 实例

如果您已经拥有 Firestore 实例,则可以直接将该实例传递给适配器。

💡

在传递实例并在无服务器环境中时,请记住处理重复的应用程序初始化。

您可以使用 initFirestore 实用程序来安全地初始化应用程序并获取实例。

./auth.ts
import NextAuth from "next-auth"
import { FirestoreAdapter } from "@auth/firebase-adapter"
import { firestore } from "lib/firestore"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: FirestoreAdapter(firestore),
})

一个实用程序函数,有助于确保在无服务器环境中不会出现重复的应用程序初始化问题。如果未传递任何参数,它将使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量来初始化 Firestore 实例。

lib/firestore.ts
import { initFirestore } from "@auth/firebase-adapter"
import { cert } from "firebase-admin/app"
 
export const firestore = initFirestore({
  credential: cert({
    projectId: process.env.FIREBASE_PROJECT_ID,
    clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
    privateKey: process.env.FIREBASE_PRIVATE_KEY,
  }),
})
Auth.js © Balázs Orbán 和团队 -2024