Function firebase云函数-https.onCall(..)可以使用Context.Auth吗?

Function firebase云函数-https.onCall(..)可以使用Context.Auth吗?,function,firebase,oauth,cloud,Function,Firebase,Oauth,Cloud,我需要建议,因为我从未尝试过这种组合: firebase应用程序+实时数据库 这个应用程序将是我的后端,并提供一些云功能 android应用程序将调用这些云功能 我想使用GoogleAuth2身份验证和“保护”云功能,这些功能只能由android应用程序调用,如果atuh仅有效 致意 伊万 对于expample,这是“addTickets”场景的我的云函数: ==index.js:== exports.addTickets = functions.https.onCall((data, cont

我需要建议,因为我从未尝试过这种组合:

  • firebase应用程序+实时数据库 这个应用程序将是我的后端,并提供一些云功能
  • android应用程序将调用这些云功能
  • 我想使用GoogleAuth2身份验证和“保护”云功能,这些功能只能由android应用程序调用,如果atuh仅有效

    致意 伊万

    对于expample,这是“addTickets”场景的我的云函数:

    ==index.js:==

    exports.addTickets = functions.https.onCall((data, context) => {
     // data comes from client app
     const buyingRecord = data;
     console.log(‘buyingRecord: ‘ + JSON.stringify(buyingRecord));
    
    return tickets.updateTicketsAmmount(buyingRecord)
     .then((result)=>{
     tickets.addTicketsBuyingRecord(buyingRecord);
     result.userid = buyingRecord.userid;
     result.ticketsCount = buyingRecord.ticketsCount;
     return result;
     });
    });
    
    =======tickets.js=======

    exports.updateTicketsAmmount = function(buyingRecord) {
     var userRef = db.ref(‘users/’ + buyingRecord.userid);
     var amountRef = db.ref(‘users/’ + buyingRecord.userid + ‘/ticketsAmount’);
     return amountRef.transaction((current)=>{
     return (current || 0) + buyingRecord.ticketsCount;
     })
     .then(()=>{
     console.log(“amount updated for userid [“ + buyingRecord.userid + “]”);
     return userRef.once(‘value’);
     })
     .then((snapshot)=>{
     var data = snapshot.val();
     console.log(“data for userid [“ + snapshot.key + “]:” + JSON.stringify(data));
     return data;
     });
    }
    
    exports.addTicketsBuyingRecord = function(buyingRecord) {
     var historyRef = db.ref(‘ticketsBuyingHistory’);
     var newRecordRef = historyRef.push();
     return newRecordRef.set(buyingRecord)
     .then(()=>{
     console.log(‘history record added.’); 
     return newRecordRef.once(‘value’);
     })
     .then((snapshot)=>{
     var data = snapshot.val();
     console.log(‘data:’ + JSON.stringify(data));
     return data;
     });
    }
    

    如果只希望经过身份验证的用户调用可调用函数,只需检查
    context.auth.uid
    是否存在。如果用户没有经过身份验证,就不会有uid。

    嗯,是的,我也这么认为,但我还不确定具体步骤是什么。1.android-oauth2-授权并获取UID2。android调用云函数发送身份验证信息3。云函数getauth(可能会以某种方式解码)和getuid。但我不确定这是不是正确的方法。不确定你所说的“步骤”是什么意思。文档讨论了如何协调客户机和服务器。这应该是你开始工作所需要知道的全部。你能给我一个提示吗。如果updateTicketsAmmount()成功,但addTicketBuyingRecord()失败怎么办?可调用的addTickets()的结果将是一个被拒绝的承诺,但是数据库中的数据会怎么样呢。我认为他们会不一致-更新的金额,但没有记录。如果我需要100%的一致性,我该怎么办?addBuyingRecord()无法“修复”金额?或者一些事务,但我已经读到,在nosql db中,在数据结构的如此低的级别上使用事务并不是最好的主意。