我的云功能仍在使用节点8,还不能更新到节点10
我希望我的云功能在用户文档更新后启动
exports.updateUser = functions.firestore.document('users/{userId}').onUpdate((change, context) => {
const after = change.after.data()
if (after.status === 'VERIFIED') {
console.log('EMAIL IS VERIFIED')
}
if (after.isVerified) {
console.info(JSON.stringify(after))
admin
.auth()
.getUser(after.uid)
.then(() => {
console.log('Email is verified')
const metadataRef = admin.database().ref('metadata/' + userRecord.uid)
return metadataRef.set({ refreshTime: new Date().getTime() })
})
.catch(error => {
console.log(error)
})
}
return
})
我以前也有这种方法,但不确定为什么现在不起作用。
现在该函数甚至没有被调用,当我在firebase面板中单击"查看日志"时,我的整个浏览器窗口都冻结了——我不确定这是否与我仍在使用节点8 的函数有关
我还可以在点击使用发送到我的电子邮件的链接后确认电子邮件已验证
firebase
.auth()
.createUserWithEmailAndPassword(inputs.email, inputs.password)
.then(res => {
const userUid = res.user.uid
const db = firebase.firestore()
// setUser(userUid)
db.collection('/users')
.doc(userUid)
.set({
emailAddress: inputs.email,
uid: userUid,
})
res.user.sendEmailVerification()
})
.catch(err => {
setErrors(prev => [...prev, err.message])
})
}
除了登录,访问user
和emailVerfied
也设置为真正的
您的云函数代码将生成一些"不稳定行为";,这通常会导致你的经历("我过去有过这种工作,但不确定为什么现在不工作"(。
当所有异步工作完成时,您需要终止云函数,请参阅文档。在后台触发的云函数的情况下,您需要返回异步方法调用返回的承诺链。
在您的情况下,您不仅没有返回getUser()
返回的承诺,而且在末尾有一个return
,它可能会向云功能平台表明,它可以在异步工作完成之前清理您的功能。
以下应该可以做到(未经测试(:
exports.updateUser = functions.firestore.document('users/{userId}').onUpdate((change, context) => {
const after = change.after.data()
if (after.status === 'VERIFIED') {
console.log('EMAIL IS VERIFIED')
}
if (after.isVerified) {
console.info(JSON.stringify(after))
return admin
.auth()
.getUser(after.uid)
.then(() => {
console.log('Email is verified')
const metadataRef = admin.database().ref('metadata/' + userRecord.uid)
return metadataRef.set({ refreshTime: new Date().getTime() })
})
.catch(error => {
console.log(error)
return null;
})
} else {
return null;
}
});