0
{ 
    "rules": { 
     "verifications": { 
      // Can only request verification code if it's been one minute than previous request. 
      "$phoneNumber": { 
       ".validate": "!data.exists() || (newData.child('timestamp').val() > data.child('timestamp').val() + 60000)" 
      } 
     }, 
     ".read": true, 
     ".write": true 
    } 
} 

このルールはFirebase Simulator上で動作し、タイムスタンプが1分以内でないと書き込みプロセスが拒否されました。しかし、私がサーバーから書き込もうとしたとき、それはルールに合格し、書き込みプロセスは許可されました。Firebaseルールはサーバー要求では機能しませんが、Simulator上で動作します

コード:

var data = { 
    timestamp: 1468664575179 
}; 

var phoneNumber = '+14253452'; 

firebase.database().ref(`verifications/${phoneNumber}`).set(data, function(err) { 
    console.log(err); 
}); 

書き込み処理がFirebaseシミュレータ上で拒否されますが、要求がサーバから来たときに許可された私はなぜだろうか。 Firebase Security Rules work in simulator, but not in code

+0

は、データベースの構造の一例を表示します。私は 'ref( 'verifications/$ {+ 14253452}')のような気がします。 – theblindprophet

+0

実際には$ {phoneNumber}、phoneNumberの値は '+14253452' –

答えて

0

これは、あなたが接続を初期化する方法によって異なります。

これは、理由を与えるものではありません。

サーバーが無制限のサービスアカウントで実行されている場合、サーバーは管理者権限で実行され、セキュリティルールをバイパスします。

// Initialize the app with a service account, granting admin privileges 
firebase.initializeApp({ 
    databaseURL: "https://databaseName.firebaseio.com", 
    serviceAccount: "path/to/serviceAccountCredentials.json" 
}); 

authentication section of the Firebase server docsを参照してください。

ドキュメントの同じセクションでは、初期化時にサーバプロセスにuidを与えることによって、あなたはこの動作を無効にする方法について説明します。

// Initialize the app with a custom auth variable, limiting the server's access 
firebase.initializeApp({ 
    databaseURL: "https://databaseName.firebaseio.com", 
    serviceAccount: "path/to/serviceAccountCredentials.json", 
    databaseAuthVariableOverride: { 
    uid: "my-service-worker" 
    } 
}); 
関連する問題