我正在使用firebase函数来生成一个2因子身份验证动态口令,我将密钥添加到数据库中,然后返回以生成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;
}
});
有什么想法吗?
发布于 2019-02-13 09:10:06
.set返回一个promise,所以您必须在.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 });
});
请参阅:https://firebase.google.com/docs/firestore/manage-data/add-data#set_a_document
https://stackoverflow.com/questions/54658891
复制相似问题