我用next-auth v4.22.1建立了一个NextJS v13.4.2项目,让用户通过使用“Login with Google”按钮进行身份验证。我目前也在使用next-auth Firebase适配器。当前文件配置为:/app/(lib)/firestore.js
:
import { initFirestore } from "@next-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,
}),
});
/app/(lib)/auth.js
:
import GoogleProvider from "next-auth/providers/google";
import { FirestoreAdapter } from "@next-auth/firebase-adapter";
import { firestore } from "@lib/firestore";
export const authOptions = {
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_ID,
clientSecret: process.env.GOOGLE_SECRET,
}),
],
adapter: FirestoreAdapter(firestore),
};
/app/api/auth/[...nextauth]/route.js
:
import NextAuth from "next-auth";
import { authOptions } from "@lib/auth";
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
现在,所有这些工作都很好,但我想做的是从我的Firestore数据库中查询一些数据并将其显示到页面中。所以,我想我可以这样做:
import { firestore } from "@lib/firestore";
import { collection, getDocs } from "firebase/firestore";
const citiesCol = collection(firestore, "cities");
const citiesSnapshot = await getDocs(citiesCol);
const citiesList = citiesSnapshot.docs.map((doc) => doc.data());
但不幸的是,我犯了一个错误:Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore
所以,我的问题是,我可以重用我导出的firestore
对象(来自/app/(lib)/firestore.js
)来处理下一个认证逻辑,以获取一些数据吗?或者我需要创建一个不同的firebase配置并重新初始化Firestore?
1条答案
按热度按时间a2mppw5e1#
将其作为社区wiki发布以获得可见性。
@samthecodingman:
@next-auth/firebase-adapter
是一个服务器端的软件包,这意味着要与firebase-admin
一起使用。您可以通过此link检查示例。
您可能还想在how to add Firebase to your JavaScript project上跟踪此链接。