Next Auth用Google Provider搭配Firebase9报GetUserByProviderAccountIdError错误
错误原因
你当前使用的Firebase 9采用模块化API,而@next-auth/firebase-adapter默认适配Firebase 8的命名空间式API。你传入适配器的db是模块化Firestore实例,没有旧版API自带的collection实例方法,因此适配器内部调用client.collection时触发类型错误。
修复方案
有两种可行修复方案,可根据你的项目偏好选择:
方案1:使用Firebase 9兼容层(改动最小)
修改firebase-config.js的初始化逻辑,使用compat兼容包导出兼容旧API的Firestore实例:
// firebase-config.js import { initializeApp } from "firebase/compat/app"; import "firebase/compat/firestore"; const firebaseConfig = { // 替换为你自己的Firebase配置项 }; const app = initializeApp(firebaseConfig); const db = app.firestore(); export { db };
修改完成后原有的[...nextauth].js配置不需要改动,直接运行即可。
方案2:适配Firebase 9模块化API(无兼容层,符合新版规范)
不需要修改Firebase配置,直接调整[...nextauth].js的适配器传入参数,将Firebase 9模块化的Firestore操作方法一并传入适配器:
// pages/api/[...nextauth].js import NextAuth from "next-auth" import GoogleProvider from 'next-auth/providers/google' import { db } from "../../../firebase-config" import { FirebaseAdapter } from "@next-auth/firebase-adapter" // 导入Firebase 9模块化Firestore方法 import { collection, doc, getDoc, getDocs, addDoc, updateDoc, deleteDoc, query, where } from "firebase/firestore" export default NextAuth({ providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, }), ], adapter: FirebaseAdapter({ db, collection, doc, getDoc, getDocs, addDoc, updateDoc, deleteDoc, query, where }), })
内容的提问来源于stack exchange,提问作者Hridaya Agrawal
相关产品推荐
相关产品推荐

