firebase - Flutter - 了解 Firebase 管理员以及如何从 email/uid/name 获取用户信息
问题描述
我正在制作一个小 Snapchat 克隆,我正在尝试构建的这个应用程序的一部分是能够添加朋友并开始与他们对话。我正在使用 Firebase 来管理我的用户,现在我有点卡住了,试图弄清楚什么是有效的,以及为什么我在尝试使用某些方法或功能时遇到问题。
我想要的是这个简单的代码行:
var userByEmail = await _admin.app().auth().getUserByEmail("b@gmail.com");
print(userByEmail.toString());
但是,这给我带来了一些问题,最近出现以下错误消息:
未处理的异常:FirebaseAuthError(auth/invalid-credential):必须使用证书凭据初始化应用程序或将您的 Firebase 项目 ID 设置为 GOOGLE_CLOUD_PROJECT 环境变量以调用 verifyIdToken()。
到了这一点,我想先问一个关于 FirebaseAdmin 和 Auth 的问题,然后再继续并可能搞砸我的应用程序设置。
有没有一种简单的方法可以做我想做的事情?
我的 Main 函数中有一个 Firebase.instance.initializeApp(),我是只调用一次还是应该在需要的每个 Stateful Widget 的 initState 中启动 initilizeApp?
此错误消息实际上是什么意思?
解决方案
您正在尝试在 Flutter 代码中使用 Firebase Admin SDK,这是不可能的。Admin SDK 提供对您的 Firebase 项目的完全管理访问权限,如果您在 Flutter 应用程序中允许这样做,这将是一个严重的安全问题。
如果您想在您的应用程序中允许某些管理功能,您必须自己提供该功能。例如,要通过电子邮件地址查找用户,有两种常用方法:
- 当每个用户注册您的应用程序时,将有关每个用户的最少信息存储在云可访问的数据库(例如 Firebase 的实时数据库或 Cloud Firestore)中,然后从那里进行查找。
- 将
getUserByEmail
来自 Admin SDK 的内容封装在您为自己、您控制的服务器或 Cloud Functions 中制作的自定义 API 中。在该 API 中,您验证进行调用的用户是否有权这样做,然后通过您尝试使用的 API 调用 Firebase,并将最小结果返回给调用者。
这两者都是可行的,并且可以解决各种用例。但是,如果您以前从未构建过后端代码,您可能会发现第一种方法更容易上手。
另见:
推荐阅读
- php - 如何修复 PHP 联系表单错误:HTML_MIME_NO_HTML_TAG、MIME_HTML_ONLY、MISSING_DATE
- java - 如何使用 Java 8 Stream 展平列表的嵌套映射?
- javascript - 使用箭头函数在javascript上的onClick事件
- java - 在 enumSet 中存储不同的枚举类型
- sparql - SPARQL:获取我们在某些 DBpedia 实体中看到的所有属性
- matlab - for 循环内的 Simulink 模型
- c# - 检查两个字符之间的特定字符
- python - 如何读取多个已知文件编码
- javascript - 为什么加载页面时声音不起作用?
- reactjs - 如何在处理程序中更改状态