首页 > 解决方案 > 添加到数据库 Firebase 后返回值

问题描述

我正在使用 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;
}
});

请问有什么想法吗?

标签: javascriptfirebasefirebase-realtime-databasegoogle-cloud-firestore

解决方案


.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 });
});

请参阅:https ://firebase.google.com/docs/firestore/manage-data/add-data#set_a_document


推荐阅读