Почему правило безопасности не работает для определенных пользователей в Firebase-Unity? - PullRequest
0 голосов
/ 04 июня 2019

Я хочу защитить базу данных каждого пользователя и доступна только ее собственному пользователю.когда я пытаюсь получить доступ к базе данных через несколько кодов в единстве, происходит сбой и разрешение на доступ к данным отклоняется.

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

...

 "rules": {
"users": {  
  "$user": {
    ".read": "auth.provider === 'facebook'", 
    ".write": "auth !== null && auth.uid === $user"
   }
 }}

...

В Unity для записи данных я использую следующий код после аутентификации пользователя: ...

playerDbRef.Child("users").Child(UserId).Child("User_Info").Child("name").SetValueAsync(UserName);

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

1 Ответ

0 голосов
/ 04 июня 2019

Если я правильно понимаю ваш вопрос, вы обеспокоены тем, что пользователи могут читать /users/$user, даже если их идентификатор пользователя не совпадает с тем, что хранится в $ user.В случае этих правил вы сделали так, чтобы любой, прошедший проверку подлинности через Facebook, мог прочитать любое значение, хранящееся в /users/$user, и чтобы заблокировать его, вы на самом деле хотите, чтобы ваше правило ".read" совпадало с вашим ".write "правило. ЕСЛИ Я неверно истолковал вашу проблему, вы можете перестать читать сейчас.

Один из способов проверки действительно простых правил - использовать имитатор базы данных реального времени Firebase, встроенный в нашу веб-консоль.Я встроил ваши примеры правил как (изменения форматирования и ведущих {}, которые вы пропустили):

{"rules": {
  "users": {  
    "$user": {
      ".read": "auth.provider === 'facebook'", 
      ".write": "auth !== null && auth.uid === $user"
     }
   }
}}

С этим симулятором вы можете видеть, что если я пытаюсь читать, когда не аутентифицирован, язаблокирован: читать без аутентификации

Но когда я читаю как любой пользователь, он позволяет мне: читать как любой пользователь Facebook

Если я нажимаю наподробно, это скажет мне точно, почему (мой поставщик аутентификации - Facebook): подробности того, почему правило прошло

С другой стороны, вы увидите, что я не могу впоследствии написатьв этот узел: запись отклонена как любой пользователь , поскольку ваше правило записи должно быть правильным, если только мой идентификатор пользователя также не совпадает: запись принята как пользователь-владелец

Я надеюсь, что этопомогает!

...