firestore安全规则request.auth.uid无法正常工作

时间:2017-12-14 08:15:00

标签: firebase vue.js firebase-authentication firebase-security google-cloud-firestore

Firestore安全规则不起作用。 帮我。 无法读取用户/用户ID的文档数据。

----------安全规则------------

        DataSet ds = new DataSet();
        string insertquery = "SELECT * FROM  [Sheet1$] where [Customer] = '" + lblcustomername + " ' ";
        OleDbConnection myConnection = new OleDbConnection(OutputDatabaseConnectionString); //define new connection object 
        OleDbDataAdapter mydataadapter = new OleDbDataAdapter(insertquery, myConnection); //define data adaptor and select column data from spreadsheet

        mydataadapter.Fill(ds);
        int i = ds.Tables[0].Rows.Count;
        // If item exists in database, update it
        if (i > 0)
        {
            try
            {
                System.Data.OleDb.OleDbConnection myConnection2; //create new connection object
                System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
                String sql = null;
                myConnection2 = new System.Data.OleDb.OleDbConnection(OutputDatabaseConnectionString); //define connection string 
                myConnection2.Open();
                myCommand.Connection = myConnection2;
                sql = "UPDATE [Sheet1$] SET [Net Weight(Kg)]= '" + textBox1.Text + "' WHERE [Customer] = '" + lblcustomername + "'";
                myCommand.CommandText = sql;
                myCommand.ExecuteNonQuery();
                myConnection2.Close();
                myConnection2.Close(); //close connection 
            }


            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

        // if it doesn't exist update database
        try
        {
            System.Data.OleDb.OleDbConnection myConnection1; //create new connection object
            System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
            String sql = null;
            myConnection1 = new System.Data.OleDb.OleDbConnection(OutputDatabaseConnectionString); //define connection string 
            myConnection1.Open();
            myCommand.Connection = myConnection1;
            sql = sql = "INSERT INTO [Sheet1$] ([Customer],[Product],[Net Weight(Kg)], [DateTime]) VALUES('" + lblcustomername.Text + "','" + lblproductname.Text + "','" + textBox1.Text + "','" + (DateTime.Now).ToString() + "')";
            myCommand.CommandText = sql;
            myCommand.ExecuteNonQuery();
            myConnection1.Close();
            myConnection1.Close(); //close connection 
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

} }

-------------- main.js --------------------

service cloud.firestore {
 match /databases/{database}/documents {
  match /users/{userId=**} {

  // Missing or insufficient permissions.
    allow read, write: if request.auth.uid == userId

  // this is work.
  //allow read, write: if request.auth != null

}

firebase ^ 4.8.0 vue ^ 2.5.0

显然,require.auth.uid似乎无法正常工作。 在我哪里有错误?

2 个答案:

答案 0 :(得分:8)

我能够自己解决

 match /users/{user} {
   allow read, write: if request.auth.uid == user
   match / {docs = **} {
      allow read, write: if request.auth.uid == user
   }
 }

答案 1 :(得分:0)

我遵循了发现here(在用户标签下)的示例,并且运行良好:

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /databases/{database}/documents {
    match /users/{userId}/{documents=**} {
      allow read, write: if isOwner(userId);
    }
  }

  function isOwner(userId) {
    return request.auth.uid == userId;
  }
}