0

Я хотел бы использовать эти правила из security quickstart guideбазы данных аутентификации в реальном времени: не удалось: DatabaseError: Отказано в

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 

Хотя я не понимаю, где auth.uid читается?

Я могу получить его, чтобы хранить информацию, когда я делаю ниже, поэтому я могу подтвердить, что проблема связана с auth.id. Я не уверен, что мне нужно передать это как параметр или что-то еще? Боюсь, я здесь потерял.

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": true, 
     ".write": true 
     } 
    } 
    } 
} 

Это текущий код Java Я использую, чтобы проверить его:

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference(); 
User u = new User("Jack", "[email protected]", "12345678"); // Very simple class holding this user information 
myRef.child("users").child(mFirebaseUser.getUid()).setValue(u); 

Я смотрел на информацию о firebases в режиме реального времени базы данных, но каждый раз, когда они добираются до аутентификации они просто «На данный момент мы отключим аутентификацию, но обязательно используем ее в производстве!».

+0

Чтобы узнать о переменной 'auth' в ваших правилах безопасности, см. Https://firebase.google.com/docs/database/security/user-security#section-variable. Он автоматически заполняется, как только пользователь подписывается и в котором содержится свойство 'uid', которое является уникальным идентификатором для подписанного пользователя. –

+0

Код, который вы использовали, не аутентифицирует пользователя, поэтому это правило не будет выполнено '$ uid === auth.uid'. Чтобы узнать, как подписываться на пользователя, см. Https://firebase.google.com/docs/auth/ –

+0

Да, извините, поэтому у меня есть LoginActivity, который аутентифицирует настройки, предназначенные для этого действия. Я считаю, что проблема может заключаться в том, что я аутентифицирую пользователя в другой деятельности и как-то теряю свое «аутентифицированное» состояние. – jackdh

ответ

0

Я чертов идиот,

Я звала FirebaseAuth.getInstance().signOut(); несколько строк выше моего кода, который я первоначально положить в целях отладки.

0

Ну, вам не нужно проходить в качестве параметра, firebase сделайте это за вас. Позвольте мне попытаться объяснить, после создания пользователя на консоли и входа в приложение firebase предоставит каждому пользователю другой номер uid (аналогично этому ca07912b-7e65-41ad-8342-e87cf6f6ceb2).

Так после входа в систему он будет храниться в вашем смартфоне и каждый запрос, что вы делаете в firebase базы данных будет анализировать правила безопасности, поэтому, когда вы говорите, что только владелец UID X может получить доступ к /users/**X**/.. затем если вы не вошли в систему, у вас нет прав на чтение и запись на этом пути.

Смежные вопросы