首页 > 解决方案 > 如何在 localhost 中使用 Angular 和 Cloud Firebase 功能

问题描述

我在 localhost 中使用 Angular 和 firebase 函数时遇到问题。我想要的是如果用户删除他的帐户,那么firebase函数应该做出反应(比如删除firestore db中已删除用户的所有内容)。例如:

角度:

public deleteAccount(): Promise<void> {
    return this.angularFireAuth.auth.currentUser.delete().then(() => {

      const test = this.angularFireFunctions.httpsCallable('httpFunction');
      test(null).subscribe((response) => {
        debugger;
      }, (error) => {
        debugger;
      });
    }).catch((error) => {
      this.uiService.showSnackBar(error.message, 'error-snackbar');
    });
  }

功能:

export const httpFunction = functions.https.onRequest((req, res) => {
  cors(req, res, () => { // need cors, because of error in console
    return functions.auth.user().onDelete((user: admin.auth.UserRecord) => {
      return res.status(200).send(user.uid);
    });
  });
});

但是即使我使用这样的代码仅用于测试,在删除用户后,也会有一个对 httpFunction 的请求并且没关系,但状态一直是“待定”。

第二件事,在firestore控制台(在功能部分的日志中)有如下信息:

“未配置计费帐户。无法访问外部网络并且配额受到严重限制。配置计费帐户以删除这些限制”

“函数执行耗时 60002 毫秒,以状态完成:‘超时’”

此帐户是免费的,我认为此消息只是一个警报,但无论如何,您知道如何在 Cloud firestore 功能中正确使用 onDelete 吗?

标签: angulargoogle-cloud-firestoregoogle-cloud-functionsangularfire2

解决方案


我强烈建议您阅读有关后台函数/触发器的 Firebase 文档。onUserDeleted是一个触发器。

https://cloud.google.com/functions/docs/concepts/events-triggers

**** 这是 TL;DR:****

您不需要通过 https 调用手动触发后台函数,因为它们会自动触发以响应事件。后台函数通过从入口点 (index.(ts|js)) 导出它们来工作。

因此,只需从 index.(ts|js) 导出您的函数并部署它。

export const onUserDeleted = functions.auth.user().onDelete((user: admin.auth.UserRecord) => {
      // Delete user in Firestore
      // Don't forget to return a Promise!
    });
  });
});

onUserDeleted将被解雇以响应删除用户。在你的情况下,调用this.angularFireAuth.auth.currentUser.delete()Angular。

您可以通过简单地console.log在 onUserDeleted 回调中使用并在 firebase 控制台中的函数 -> 日志下查看它来测试它。


推荐阅读