在Cloud Functions for Cloudbase中调用sendPasswordResetEmail()

时间:2017-04-04 18:57:34

标签: firebase firebase-authentication google-cloud-functions

我知道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()对象不同,这可能会起作用:

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()函数的任何明显引用,所以也许它不是直接可用的(还是?)。有没有其他方法来触发这个 - 除了把它放回客户端代码中?

2 个答案:

答案 0 :(得分:5)

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

我希望随着时间的推移,这两个API会稍微收敛,但是现在看来你无法从云功能启动密码重置。

答案 1 :(得分:0)

另一种解决方案是生成重置密码链接,然后通过电子邮件发送。可以在这样的云函数中完成此操作:

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

然后,您可以使用自己的电子邮件服务通过电子邮件发送链接。