Sco*_*ott 4 node.js firebase-authentication firebase-admin
我在节点服务器上运行以下代码。
import admin from 'firebase-admin';
import {getAuth} from 'firebase/auth';
class MyFirebase {
constructor() {
console.log("MyFirebase Constructor");
this.firebaseApp = admin.initializeApp({
credential: admin.credential.cert("PATH_TO_CERT/cert.json"),
databaseURL: "https://DATABASE_URL",
});
console.log("App name="+firebaseApp.name);
this.defaultAuth = getAuth(firebaseApp);
this.database = this.firebaseApp.database();
// database ref code here...
}
}
Run Code Online (Sandbox Code Playgroud)
它会抛出以下错误:
返回 app.container.getProvider(name); 类型错误:无法读取未定义的属性“getProvider”
如果我从 getAuth(..) 调用中删除“firebaseApp”,我会收到此错误:
未创建 Firebase 应用“[DEFAULT”] - 调用 Firebase App.initializeApp() (app/no-app)
然而“console.log(“App Name...”)”行产生:
应用程序名称=[默认]
很明显,一个默认应用程序已经创建了。此外,如果我删除“getAuth ...”调用,数据库调用从下面的实时数据库中提取数据就可以正常工作,这似乎意味着身份验证工作正常,因为我可以从数据库访问数据。
到底他妈发生了什么?
小智 14
新的模块化 API 的语法略有不同。如果您将其包装在一个类中,以下内容应该仍然有效,但只要您只在 Express 的顶部执行一次?服务器你不需要使用类。
另外,我使用 require 语法,但导入也应该起作用,具体取决于您的设置。
//Import each function from the correct module.
const { initializeApp, applicationDefault } = require("firebase-admin/app");
const { getAuth } = require("firebase-admin/auth");
const { getDatabase } = require("firebase-admin/database");
const app = initializeApp({
credential: applicationDefault(), //Don't forget to export your configuration json https://firebase.google.com/docs/admin/setup
databaseURL: "https://DATABASE_URL",
});
const auth = getAuth(app)
const database = getDatabase(app)
Run Code Online (Sandbox Code Playgroud)
它没有很好的记录,但您可以在 Admin SDK 参考中找到提示:https ://firebase.google.com/docs/reference/admin/node/firebase-admin.auth
提示:在 VSCode 中,如果导入路径格式正确,当您将鼠标悬停在每个函数上时,您应该会看到每个函数的描述。
小智 11
您将 Firebase Admin SDK (Node.js) 与 Firebase Javascript SDK 混淆了。前者是针对后端的,后者是针对前端的。我理解您的困惑,因为前端包可以通过 NPM 安装,尽管它们应该与前端代码捆绑在一起。
你不能这样做:
import admin from 'firebase-admin' // back-end code
import { getAuth } from 'firebase/auth' // front-end code !!!
const adminApp = admin.initializeApp(...)
getAuth(adminApp) // TypeScript actually catches this error
/*
Argument of type 'App' is not assignable to parameter of type 'FirebaseApp'.
Property 'automaticDataCollectionEnabled' is missing in type 'App' but required in type 'FirebaseApp'.ts(2345)
app-public.d.ts(92, 5): 'automaticDataCollectionEnabled' is declared here.
const adminApp: admin.app.App
*/
Run Code Online (Sandbox Code Playgroud)
如果您在后端,只需用于adminApp.auth()
获取 Auth 实例。如果在前端,则需要getAuth
使用前端Firebase App实例进行调用:
import { initializeApp } from 'firebase/app'
import { getAuth } from 'firebase/auth'
const app = initializeApp(...)
const auth = getAuth(app)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9785 次 |
最近记录: |