有没有办法从客户端应用程序中调用 Firebase 服务器“功能”,比如 Angular 2?

Posted

技术标签:

【中文标题】有没有办法从客户端应用程序中调用 Firebase 服务器“功能”,比如 Angular 2?【英文标题】:Is there a way to call a Firebase server "function" from within a client app, say with Angular 2? 【发布时间】:2017-08-31 20:00:34 【问题描述】:

因此,Firebase 提供了一种称为“函数”的东西,它本质上是一个 nodejs 服务器,它预先配置了所有 Firebase 内容,并自动处理所有缩放。我想知道,有没有办法从 Angular 2 应用程序调用“函数”index.js 文件中的函数?

我需要使用 firebase-admin npm 模块来检查用户的电子邮件是否存在,然后获取该用户的 uid(如果存在)。

根据link,我可以设置我的 index.js 文件,例如:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

// I'm actually not sure if this is how you do this part:
exports.getUserByEmail = (email) => 
  return admin.auth().getUserByEmail(email);

有没有办法可以在我的 Angular 2 应用程序的组件内调用 getUserByEmail()

提前致谢!

【问题讨论】:

你可以调用一个函数——做任何你想做的事情——通过HTTP。您可能只想允许来自经过身份验证的用户的呼叫,因此请查看:github.com/firebase/functions-samples/tree/master/… 我很欣赏这一点,但即使从这个例子来看,我仍然不能完全确定要向哪个 URL 发出请求以及如何通过 http 调用调用函数。有什么帮助吗? 我的理解是它是一个基于项目ID的URL。看看:github.com/firebase/functions-samples/tree/master/quickstarts/… 啊,要像这样使用云功能,我是否必须将我的计划升级到非 spark 的东西才能做到这一点? 我的理解是,如果你想从函数内访问非谷歌域,你只需要升级。 【参考方案1】:

直接从客户端代码调用云函数有两种主要方式。

您可以使用database trigger,它会在您的 Firebase 项目的实时数据库中的某个位置发生变化时做出响应。

您还可以在访问 HTTP 端点时使用 HTTP trigger 响应。对于 Web 应用程序,您可以使用任何您想要调用 XHR 事务的方法。

您使用哪一种取决于您应用的架构,以及在某种程度上您的偏好。在提供的sample code 中,有很多两者的样本,甚至更多。

您绝对可以使用 Firebase 管理 SDK 从您的函数代码中访问您的项目。许多样本正是这样做的。

【讨论】:

【参考方案2】:

Firebase 刚刚在 3 月 20 日发布了一个新的 SDK,它允许您从客户端调用类似 HTTPS 触发器的函数,最好的部分是它会检查用户身份验证,因此您可以将函数限制为仅由经过身份验证的用户调用,并且很容易访问他们的帐户详细信息,例如电子邮件、uid、姓名等。查看更多信息: https://firebase.google.com/docs/functions/callable

【讨论】:

以上是关于有没有办法从客户端应用程序中调用 Firebase 服务器“功能”,比如 Angular 2?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从我的 Node.js 服务器使用 Firebase Admin SDK 发送验证电子邮件?

有没有办法在 iOS 和 WatchOS 应用之间共享 Firebase Auth 登录?

Web Firebase Cloud Messaging - 如何从客户端订阅主题? [复制]

有没有办法从 firebase 控制台发送 firebase 网络推送通知

通过 Firebase 从 Android 调用云函数

如何在没有客户端身份验证的情况下从服务器验证 Firebase 用户?