问题描述
我正在使用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; } });
有什么想法吗?
1楼
Jeremy
0
2019-02-13 01:10:05
.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 }); });
请参阅: :