使用Next-Auth+Firebase Adapter实现认证时的GRPC流连接错误解决
Next-Auth 结合 Firebase 认证后加载卡住,GRPC 连接失败
我用 Next-Auth 搭配 Firebase 作为后端实现用户认证,以下是我的 [...nextauth].js 代码:
import NextAuth from "next-auth/next" import GoogleProvider from "next-auth/providers/google" import { FirestoreAdapter } from "@next-auth/firebase-adapter" export default NextAuth({ providers: [ GoogleProvider({ clientId: process.env.GOOGLE_ID, clientSecret: process.env.GOOGLE_SECRET, }), ], adapter: FirestoreAdapter({ apiKey: process.env.FIREBASE_API_KEY, appId: process.env.FIREBASE_APP_ID, authDomain: process.env.FIREBASE_AUTH_DOMAIN, databaseURL: process.env.FIREBASE_DATABASE_URL, projectId: process.env.FIREBASE_PROJECT_ID, storageBucket: process.env.FIREBASE_STORAGE_BUCKET, messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID, emulator: {}, }), })
点击谷歌登录后,页面一直处于加载状态,终端抛出错误:
Connection GRPC Stream error. Code: 14 Message: 14 UNAVAILABLE: No Connection established
解决办法
移除空的
emulator配置
代码里设置了emulator: {}但未指定模拟器地址,会导致 NextAuth 尝试连接本地 Firestore 模拟器却失败。如果没使用模拟器,直接删除该配置项:adapter: FirestoreAdapter({ apiKey: process.env.FIREBASE_API_KEY, appId: process.env.FIREBASE_APP_ID, authDomain: process.env.FIREBASE_AUTH_DOMAIN, databaseURL: process.env.FIREBASE_DATABASE_URL, projectId: process.env.FIREBASE_PROJECT_ID, storageBucket: process.env.FIREBASE_STORAGE_BUCKET, messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID, // 删除 emulator: {} }),检查 Firestore 权限规则
默认的 Firestore 安全规则会阻止未认证的写入操作,而 NextAuth 创建用户时需要写入权限。可临时设置宽松规则测试(测试完成后务必改回严格规则):rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }验证环境变量正确性
确认所有 Firebase 相关环境变量(如FIREBASE_PROJECT_ID、FIREBASE_API_KEY等)无拼写错误或遗漏,可临时在代码中打印变量值排查:console.log(process.env.FIREBASE_PROJECT_ID);排查网络连接问题
GRPC 错误多与网络相关,确保开发环境能正常访问 Firebase 服务,未被防火墙或代理拦截。
内容的提问来源于stack exchange,提问作者Melsonic
相关产品推荐
相关产品推荐

