javascript - 添加到数据库 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;
}
});
请问有什么想法吗?
解决方案
.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
推荐阅读
- php - Symfony 中的 REQUEST 是否比“标准”PHP 中的更安全?
- haskell - 关于 LYAH 执行 take 的问题
- node.js - 选择器存在但无法获取该节点的信息,因为指定的选择器与 DOM 树中的任何节点都不匹配
- python - 将嵌套列表转换为 numpy 数组
- c++ - 带有 MKL 分段错误的犰狳:安装或链接问题?
- python - 如何创建迭代集合的数据框?
- python-3.x - 如何使用 Scrapy 正确请求“multipart/form-data”表单?
- python - 带有参数/输出参数的pyodbc exec存储过程-更新不起作用
- angular - 如何在 Angular 6 应用程序中设置基本网址(刷新后获取 404 页面)?
- ssis - 在 SSIS 中,让目标接受多个输入