当我尝试从 NextAuth.js 进行身份验证时,为什么 Firebase 会发送“权限被拒绝”响应?

问题描述 投票:0回答:1

我有一个

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'
}
firebase next.js firebase-authentication next-auth
1个回答
0
投票

@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"

© www.soinside.com 2019 - 2024. All rights reserved.