如何解决云功能未触发,尝试查看日志时浏览器窗口也冻结
我的云功能仍在使用节点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
的访问权限设置为true
解决方法
您的Cloud Function代码将生成一些“不正常的行为”,通常会导致您遇到的事情(“我过去曾做过,但不确定为什么现在不行”。
所有异步工作完成后,您需要终止Cloud Function,请参见doc。对于后台触发的Cloud Function,您需要返回异步方法调用返回的承诺链。
在您的情况下,不仅您不退回getUser()
返回的承诺,而且末尾还有一个return
,这可能表明Cloud Function平台可以清理您的功能在异步工作完成之前。
以下应该可以解决这个问题(未测试):
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;
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。