我正在使用firebase函数来生成2因子身份验证OTP,我正在向数据库添加密码,然后返回以生成QRCode以能够与身份验证器一起使用,但是我只能返回密码,并且希望在显示之前确认它已添加到数据库中,此刻它返回时无论数据库中什么都没有,但是有时什么也没有。
exports.TOTPSetup = functions.https.onCall((data, context) => {
var speakeasy = require('speakeasy');
var secret = speakeasy.generateSecret({length: 20});
admin.firestore().collection('TOTPSecret').doc(data.uid).set({
secret:secret.base32
},
{merge:true});
if(context.auth.token.admin){
return secret;
}
});
有什么想法吗?
答案 0 :(得分:0)
.set
返回一个承诺,因此您必须返回.then
以确保成功写入。
exports.TOTPSetup = functions.https.onCall((data, context) => {
var speakeasy = require('speakeasy');
var secret = speakeasy.generateSecret({length: 20});
admin.firestore().collection('TOTPSecret').doc(data.uid)
.set({ secret:secret.base32 }, {merge:true})
.then(() => {
// successfully written
if(context.auth.token.admin){
return secret;
}
})
.catch(err => { // not successful });
});
请参阅:question