1

Привет, ребята, я новичок в Firebase, и я пытаюсь разработать простое приложение для чата. До сих пор я получил аутентификацию, выполнив действия, описанные в документации Firebase.Не удается прочитать данные из Firebase после аутентификации

Это мой метод Войти

loginUser: function(){ 
     console.log("Login button"); 
     var self = this; 
     ref.authWithOAuthPopup("github", function(error, authData) { 
      if (error) { console.log("Login Failed!", error);} 
      else { 
       console.log(authData); 
       ref.child("users").child(authData.uid).set({ 
        auth : authData.auth, 
        provider : authData.provider, 
        name : authData.github.displayName, 
        imgUrl : authData.github.profileImageURL, 
        token: authData.token 
       }); 
       self.user.name = authData.github.displayName; 
       self.user.imgUrl = authData.github.profileImageURL; 
       self.user.provider = authData.provider; 
       setTimeout(function(){ self.authenticated = true; }, 2000); 
       this.getContacts(); 
      } 
     },{ 
      remember : "sessionOnly", 
      scope: "user" 
     }); 

    } 

и это метод getContacts (я утешал снимок, но я ничего не получил)

getContacts: function(){ 
     console.log('GET CONTACTS'); 
     var self = this; 
     //retrieving all the user, but for somehow this request doesn't execute 
     ref.child('users').once('value',function(snapshot){ 
      var contacts = snapshot.val(); 
      console.log(contacts); 
      for(var contact in contacts){ 
      self.contacts.push({ 
       id: contact, 
       name: contacts[contact].name, 
       imgUrl: contacts[contact].imgUrl, 
       provider: contacts[contact].provider 
      }); 
      } 
     }); 
    } 

это правила безопасности

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     // grants write access to the owner of this user account whose uid must exactly match the key ($uid) 
     ".write": "auth !== null && auth.uid === $uid", 
     // grants read access to any user who is logged in with GitHub 
     ".read": "auth !== null && auth.provider === 'github'" 
     } 
    } 
} 

Должен отметить, что я использую Vuejs

ответ

4

Предоставляющий доступ к определенным пользователям: /users/$uid. Но чтобы иметь возможность запускать запрос с узлом в Firebase, вы должны иметь доступ на чтение к этому узлу. Поэтому Firebase отклоняет ваш запрос, потому что у вас нет доступа к /users. Документация охватывает это в разделе "rules are not filters". Многие сталкиваются с этой проблемой, поскольку это очень распространенный подход в реляционных базах данных. Тот факт, что rules are not filters и что permissions cascade down, являются двумя наиболее распространенными ловушками модели безопасности Firebase.

В этом случае вы, вероятно, хотите, чтобы предоставить всем пользователям доступ ко всему /users узла, так что вы можете просто переместить разрешение на чтение на один уровень вверх:

{ 
    "rules": { 
    // grants read access to any user who is logged in with GitHub 
    ".read": "auth !== null && auth.provider === 'github'" 
    "users": { 
     "$uid": { 
     // grants write access to the owner of this user account whose uid must exactly match the key ($uid) 
     ".write": "auth !== null && auth.uid === $uid", 
     } 
    } 
} 

При этом каждый GitHub аутентификацией пользователей, может читать всех пользователей, и поэтому запрос не будет отклонен.

В других случаях вам, возможно, придется моделировать свои данные по-разному, чтобы работать с ограничениями безопасности, которые вы хотите.

+0

Большое вам спасибо, сейчас это работает !!! – AngelSalazar