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

Shi*_*eda 7 firebase firebase-security vue.js firebase-authentication google-cloud-firestore

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

}}

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

import Vue from 'vue'
import Quasar from 'quasar'
import firebase from 'firebase'
import 'firebase/firestore'

Vue.config.productionTip = false
Vue.use(Quasar)


let app;
firebase.initializeApp({
  apiKey: "",
  authDomain: "",
  databaseURL: "",
  projectId: "",
  storageBucket: "",
  messagingSenderId: ""
})


firebase.auth().onAuthStateChanged(user=> {
  if (user) {
    let ref = firebase.firestore().collection('users').doc(user.uid)
    ref.get().then(snapshot=>{
      // Error !! : Missing or insufficient permissions.
    }
  }
  if(!app){
    Quasar.start(() => {
      app = new Vue({
        el: '#q-app',
        render: h => h(require('./App').default)
      })
    })
  }

})
Run Code Online (Sandbox Code Playgroud)

firebase ^ 4.8.0 vue ^ 2.5.0

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

Shi*_*eda 10


我能够自己解决它

 match /users/{user} {
   allow read, write: if request.auth.uid == user
   match / {docs = **} {
      allow read, write: if request.auth.uid == user
   }
 }
Run Code Online (Sandbox Code Playgroud)


Jac*_*que 8

我按照我在这里找到的示例(在“用户”选项卡下)进行操作,效果很好:

// 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 效果非常好,在我的例子中只需将 firebase.storage 更改为 cloud.firestore 即可。谢谢你! (3认同)