我有一个
NextJS
项目设置,我使用 NextAuth.js
添加 Firebase Auth
。
我使用
NextAuth.js
中的文档在应用程序上添加 Firebase Auth,但除非我将 Firestore 上的安全规则设置为 allow read, write: if true;
,否则它不起作用。
不与
allow read, write: if request.auth != null;
合作可能会出现什么问题?
我有一个
firebase.config.ts
:
import { initializeApp, FirebaseOptions } from "firebase/app";
import {getAuth} from "firebase/auth";
const firebaseConfig: FirebaseOptions = {
apiKey: process.env.API_KEY,
authDomain: process.env.AUTH_DOMAIN,
projectId: process.env.PROJECT_ID,
storageBucket: process.env.STORAGE_BUCKET,
messagingSenderId: process.env.MESSAGING_SENDER_ID,
appId: process.env.APP_ID,
};
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
export {auth, app, firebaseConfig}
这在
/pages/api/auth/[...nextauth].ts
中使用以符合 NextAuth.js 文档
import NextAuth from "next-auth"
import GoogleProvider from "next-auth/providers/google"
import { FirestoreAdapter } from "@next-auth/firebase-adapter"
import {firebaseConfig} from "../../../firebase.config"
export default NextAuth({
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_ID,
clientSecret: process.env.GOOGLE_SECRET,
})],
adapter: FirestoreAdapter(firebaseConfig)
})
然后我只需使用以下方法触发身份验证:
import { signIn } from "next-auth/react";
export default function Header() {
return (
<nav className="flex justify-between items-center p-4 bg-balmy-green">
<div className="flex items-center">
<h1 className="text-3xl font-bold pl-6 text-white">Tixer</h1>
</div>
<button
onClick={() => signIn()}
className="hover:text-gray-300 text-white font-bold py-2 px-4 rounded"
>
Sign In
</button>
</nav>
);
}
在终端中我看到这个:
[next-auth][error][adapter_error_getUserByAccount]
https://next-auth.js.org/errors#adapter_error_getuserbyaccount
Missing or insufficient permissions. {
message: 'Missing or insufficient permissions.',
stack: 'FirebaseError: Missing or insufficient permissions.',
name: 'FirebaseError'
}
@esafresa 我找到了解决方案:
如果您正在使用:
npm uninstall @next-auth/firebase-adapter
然后:
npm install @auth/firebase-adapter@^2.4.2 --force
npm install firebase-admin@^12.0.0
重新启动应用程序,它应该可以工作 (我正在使用这个:
import { FirestoreAdapter } from "@auth/firebase-adapter"
)