当前位置: 首页 > 知识库问答 >
问题:

在Firebase云函数中使用getUserByEmail

商池暝
2023-03-14

在我正在开发的Firebase web应用程序中,我想从邮件地址获取用户ID。为此,我正在尝试编写一个云函数。但它不起作用,或者我没有正确使用它。以下是当前代码(基于我在网上找到的一些示例):

"use strict";

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
admin.initializeApp(functions.config().firebase);

exports.myFunc = functions.https.onRequest(function(req, resp) {
const from = req.body.sender;

admin.auth().getUserByEmail(from)
    .then(function(userRecord) {
        console.log("Successfully fetched user data:", userRecord.toJSON());
    })
    .catch(function(error) {
        console.log("Error fetching user data:", error);
    });
});

运行“firebase deploy”时,我看不到任何问题。然后,我尝试用各种方法测试该功能,就像我在本教程之后编写的演示应用程序一样。

例如(现有和不存在的邮件地址):

https://us-central1-myapp.cloudfunctions.net/myFunc
https://us-central1-myapp.cloudfunctions.net/myFunc?from=abcd@xyz.com

但在任何一种情况下,我都不会在Web控制台中得到任何东西,而在浏览器中则是这样:

Error: could not handle the request

欢迎经验更丰富的Firebase云功能用户提供任何建议。

事实上,一些带有示例代码的教程展示了如何在Firebase云函数中使用getUserByEmail将是最好的。

......在进一步调查后,这里有更多的信息......

使用此代码时:

const from = req.body.sender;
admin.auth().getUserByEmail(from)

我在日志中发现此错误:

Error fetching user data: FirebaseAuthError: The email address is improperly formatted.

使用以下代码行之一时:

admin.auth().getUserByEmail("fakemail@example.com")
admin.auth().getUserByEmail("realmail@example.com")

我在日志中得到预期的结果:

这是第一行(带有假邮件):

Error fetching user data: FirebaseAuthError: There is no user record corresponding to the provided identifier.

这是第二行(实际存在的邮件):

Successfully fetched user data: {
2022-01-22T07:25:04.946Z ? myFunc:   uid: 'yfC123abc....',
2022-01-22T07:25:04.946Z ? myFunc:   email: 'realmail@example.com',
.....
}

我需要的是知道如何正确地让这个函数接受一个参数(从或任何调用),并且知道如何使用我原来的web应用程序中的函数。

。。。经过更多的尝试和错误之后,还有更多的代码。。。

这里有一段新的代码显示了我当前的问题:

const from = req.query.from;
// The 2 following lines produce the expected result.
// That is the mail address passed as a parameter.
console.log("from(CL):", from);
functions.logger.log("from(FL):", from);

admin.auth().getUserByEmail(from)
.then(function(userRecord) {

当使用getUserByEmail在线运行firebase deploy时,我收到一条错误消息:

src/index.ts:37:33 - error TS2345: Argument of type 'string | string[] | ParsedQs | ParsedQs[] | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.

37     admin.auth().getUserByEmail(from)

                               ~~~~

用于处理getUserByEmail调用的行的正确语法是什么。

共有2个答案

赏星河
2023-03-14

问题似乎是req。车身 。。。

将输入作为查询字符串传递时:?发件人=abcd@xyz.com

我假设req.query.from在设置时应该携带一个值。

祝花蜂
2023-03-14

我不得不用这个:

const from = String(req.query.from);

取而代之的是:

const from = req.query.from;
 类似资料:
  • 我有一个firebase项目(blaze plan)和firestore数据库。我需要在云函数中使用mqtt客户机。 但是当我加上这一行 索引。js,它无法部署到firebase。 它给出了这个错误: {@type:“type.googleapis.com/google.cloud.audit.AuditLog”,“status:{“code”:3, “消息”:“加载用户代码时函数失败。这可能是由

  • 在以前的GCP项目中,我们部署了基于Python的云功能(使用gcloud cli),理想情况下,我们希望继续使用Python实现Firebase云功能。所以我的问题是: > 是否可以部署基于Python的Firebase云功能?如果没有: 我们是否可以回到使用gcloud cli部署基于Python的GCP云函数,并且仍然让它们作为Firestore触发器工作?

  • 云功能文档说 //使用Firebase管理SDK访问Firebase实时数据库。const admin=require('firebase-admin');管理初始化EAPP(); 我使用的是Cloud Firesta,而不是实时数据库。我如何访问它?

  • 所以我一直很高兴地使用async/await,因为Firebase云函数支持节点8。不过我有一件事要做。当使用可调用函数时,会告诉您必须在函数中返回promise,否则它将无法正常工作。当使用原始promise时,我很清楚如何使用它: 但是现在,随着异步等待,我不确定如何返回这个“promise链”: 有人知道吗?

  • 我试图部署一个PubSub函数: 在我第一次尝试部署该功能之前,云调度API被禁用。 它自动启用了。 PubSub也已启用。 由于Cloud Scheduler API和PubSub已经为项目启用。理想情况下,在部署函数时不应该有任何错误。错误确实提到了几分钟后尝试。但是自从我启用PubSub和Cloud Scheduler API以来,已经过去了24小时。 节点:v12。10 Firebase函