我知道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()
函数的任何明显引用,所以也许它不是直接可用的(还是?)。有没有其他方法来触发这个 - 除了把它放回客户端代码中?
答案 0 :(得分:5)
好的,我想我终于找到了我的具体问题的答案 - auth()
调用返回的2个对象不一样,如下所示:
sendPasswordResetEmail()
我希望随着时间的推移,这两个API会稍微收敛,但是现在看来你无法从云功能启动密码重置。
答案 1 :(得分:0)
另一种解决方案是生成重置密码链接,然后通过电子邮件发送。可以在这样的云函数中完成此操作:
const resetLink = await admin.auth().generatePasswordResetLink('user@example.com')
然后,您可以使用自己的电子邮件服务通过电子邮件发送链接。