代码之家  ›  专栏  ›  技术社区  ›  ewizard

从没有auth的脚本更新数据库时的Firestore安全规则

  •  0
  • ewizard  · 技术社区  · 6 年前

    我正在使用以下Firestore安全规则:

    // Allow read/write access on all documents to any user signed in to the application
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.auth.uid != null;
        }
      }
    }
    

    问题是,对于我的反应本机应用程序中的一个特性,执行回调(以共享事务ID),并且应用程序退出到浏览器来处理回调。在服务器上的回调脚本中,我有如下代码:

            fetch(url, {
                method: 'GET',
                headers: {
                    Accept: 'application/json',
                }
            }).then(response => {
    
              if (response.ok) {
                response.json().then(json => {
    
                    if(json.data == "Manual sale") {
                        alert("Manual sale complete! Return to Fairstarter!");
                        return;
                    }
    
                    var quant = 0;
                    var itemsRef = db.collection('items');
                    var query = itemsRef.where('barcode', '==', String(json.data)).get()
                        .then(snapshot => {
    
                          snapshot.forEach(doc => {
    
                              ....
    
                              //UPDATE THAT IS LOCKED OUT BY PERMISSIONS
                              itemsRef.doc(doc.id).update({
                                 [Object.keys(doc.data())[0]]]: {
                                    quantity: newVal
                                 }
                              })
    

    问题是,在上面的块中,我尝试更新数据库,但是由于我不是来自现有的用于AuthFixe用户的东西,所以由于权限,我被FielBASE拒绝了。

    如何在允许回调脚本更新数据库的同时保持数据库的安全?

    1 回复  |  直到 6 年前
        1
  •  0
  •   ewizard    6 年前

    使用firebase anonymous登录works,在配置firebase之后,我将此放在脚本的顶部:

        firebase.auth().onAuthStateChanged(function(user) {
          if (user) {
            // User is signed in.
            var isAnonymous = user.isAnonymous;
            //alert(user.uid);
            // ...
          } else {
            // User is signed out.
            // ...
          }
          // ...
        });
    
        firebase.auth().signInAnonymously().catch(function(error) {
              // Handle Errors here.
              var errorCode = error.code;
              var errorMessage = error.message;
              // ...
              alert(errorMessage);
        });
    

    不要忘记在firebase项目设置中启用匿名身份验证。