0

Я довольно новичок в Firebase, и у меня возникают проблемы с моими правилами безопасности. У меня есть клиент android, который регистрирует или регистрирует нового пользователя. На первом входе в систему этого пользователя, я сохранить свои данные в firebase так:Правила Firebase - Не удается сохранить данные пользователя при первом входе в систему

public void onAuthenticated(AuthData authData) { 
       //Save user data to firebase 
       Map<String, Object> map = new HashMap<String, Object>(); 
       map.put("provider", authData.getProvider()); 
       ref.child("users").child(authData.getUid()).updateChildren(map); 
} 

(Это называется в onAuthenticated() при проверке подлинности пользователя)

Тем не менее, кажется, что мои правила безопасности не являются позволяя пользователю писать в базу данных, если их данные уже не сохранены. Мои правила заключаются в следующем:

{ 
"rules": { 
    "users":{ 
     "$userid": { 
     ".read": "auth.id == $userid && auth !== null", 
     ".write": "auth.id == $userid && auth !== null" 
     } 
    } 
    } 
} 

Кроме того, если это важно, вот пример того, как выглядит данные, как, когда он на самом деле хранится: an example

Как мне изменить мои правила, чтобы позволить клиенту для записи пользовательских данных после его аутентификации на сервере?

EDIT: После некоторых испытаний выяснилось, что эти правила не позволяют пользователю ничего писать на свой пользовательский узел, даже если он уже существует.

ответ

5

У вас есть опечатка в ваших правилах Вы:

".write": "auth.id == $userid && auth !== null" 

Это должно быть auth.uid, не auth.id.

Я также сделал бы нулевую проверку сначала.

Итак:

".write": "auth !== null && auth.uid == $userid" 
+0

Для фона, проверка на нуль не является необходимым в данном случае. Правила безопасности не будут выполняться, если к объекту auth обращаются, и это не объект. Но это не повредит, и может быть полезно при написании правил, подобных этому (где auth.uid предотвратит выполнение второй части правила): 'auth.uid === 'frank' || (auth === null && root.child ('foo'). val() === 'bar') ' – Kato

+0

Oooh ... Мне нравится это' auth.uid === 'frank'' правило. Можем ли мы получить это, введенное в каждую Firebase там, пожалуйста? –

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