在Firebase的云函数中调用sendPasswordResetEmail()

在Firebase的云函数中调用sendPasswordResetEmail(),firebase,firebase-authentication,google-cloud-functions,Firebase,Firebase Authentication,Google Cloud Functions,我知道Firebase的云函数仍然很新,但我正在尝试将一些客户端代码移到云中,“注册”过程似乎是一个明显的目标 目前,注册页面要求提供电子邮件地址,生成随机密码并调用createUserWithEmailAndPassword()。这很好,然后我想将“重置密码”电子邮件发送到刚才使用的电子邮件地址,既可以确认电子邮件地址,也可以让用户有机会设置自己选择的特定密码。我可以在客户端代码中实现这一点,但我想尝试创建一个由onCreate()触发的函数 这一点工作正常,但我不知道如何在firebase函

我知道Firebase的云函数仍然很新,但我正在尝试将一些客户端代码移到云中,“注册”过程似乎是一个明显的目标

目前,注册页面要求提供电子邮件地址,生成随机密码并调用
createUserWithEmailAndPassword()
。这很好,然后我想将“重置密码”电子邮件发送到刚才使用的电子邮件地址,既可以确认电子邮件地址,也可以让用户有机会设置自己选择的特定密码。我可以在客户端代码中实现这一点,但我想尝试创建一个由
onCreate()
触发的函数

这一点工作正常,但我不知道如何在firebase函数环境中调用
sendPasswordResetEmail()

这是迄今为止的代码:

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

exports.createUserRec = functions.auth.user().onCreate(event => {
  admin.auth().sendPasswordResetEmail(event.data.email)
})
功能日志显示:

TypeError: admin.auth(...).sendPasswordResetEmail is not a function
我假设
auth()
对象与客户端SDK中的
auth()
对象不同,在客户端SDK中可以使用:

import * as firebase from 'firebase/app'
import 'firebase/database'
import 'firebase/auth'

var fbConfig = {
  // All the required bits
}

firebase.initializeApp(fbConfig)
.
.
.
firebase.auth().sendPasswordResetEmail(emailAddress)

我简单地搜索了firebase函数的源代码,没有看到任何明显的引用
sendPasswordResetEmail()
函数,因此它可能还没有直接可用(还没有?)。除了将其放回客户端代码之外,还有其他方法触发此操作吗?

好的,我想我终于找到了我的特定问题的答案-调用
auth()
返回的两个对象不一样,如下所示:

  • 方法包括
    sendPasswordResetEmail()
  • 方法不包括
    sendPasswordResetEmail()

我希望随着时间的推移,这两个API会略有收敛,但目前看来,您无法从云功能启动密码重置。

另一个解决方案是生成重置密码链接,然后通过电子邮件发送。这可以在云函数中完成,如下所示:

const resetLink=wait admin.auth().generatePasswordResetLink('user@example.com')

然后你可以使用自己的电子邮件服务发送该链接。

链接是404,有更新吗?第一个链接有效,我更新了第二个链接(谷歌出于某种原因添加了“-1”)。这应该是公认的答案,甚至更可取,因为我的问题实际上是关于如何在管理SDK中实现这一点,这并不能真正解决这个问题,相反,它提供了一个替代方案。我的回答是,这两个SDK并不等同。@dsl101好的,但它回答了我的问题,这是最重要的:D我只是在开玩笑:P@dsl101这与这里的主题有关吗?嗯,我想是的,但我有多不知道,我很害怕。我们使用的firebaseui只有google和用户名/密码提供程序。我还没有尝试过电子邮件链接登录,谢天谢地,我们的密码重置要求很低,我们只需通过控制台就可以完成,所以我最终没有费心让电子邮件密码重置工作。。。