2016-08-19 2 views
0

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

Моя база данных структурирована следующим образом:

users { 
    $uid { 
    username: "username1", 
    gender: "xyz" 
    email: "xyz" 
    } 
}, 
usernames { 
    "username1": $uid" 
} 

Пользователи утверждают, имя пользователя с их $ UID.

Это мои правила:

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".write": "auth !== null && auth.uid === $uid", 
     ".read": "auth !== null && auth.uid === $uid", 
     "username": { 
      ".validate": " 
      !root.child('usernames').child(newData.val()).exists() || 
      root.child('usernames').child(newData.val()).val() == $uid" 
     } 
     } 
    }, 
    "usernames" : { 
     ".write": "!data.exists() && auth!= null", 
     ".validate": "newData.val() == auth.uid" <---- I can't get this too work 
    } 
    } 
} 

При настройке имени пользователя при $ UID проверяет индекс USERNAMES поэтому имя пользователь может быть записано только с именем пользователя не используются или тот, который имеет собственный $ UID.

Мне нужны только данные, в которых значение является аутентифицированным пользователем uid, а ключ является именем пользователя. Я не могу заставить это работать. Я подозреваю, что я неправильно использую newData(). Val(). Моя инструкция проверки не работает.

Я бы хотел избежать использования пользовательских токенов, но я открыт для любых предложений. Заранее спасибо.

Извините, если это объяснение слишком вытянуто, это мой второй пост в StackOverflow.

Редактировать # 2 Я сделал некоторые исследования из того, что я могу сказать, и все, что я могу найти в документах, говорит о необходимости использовать .child() перед .val(), но мне нужно .child взять переменную вместо задайте имя пользователя.

+1

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

+0

Я с картой здесь: на первый взгляд правила выглядят хорошо. Что не удается? Для чего-то подобного это помогает увидеть текущий JSON (как текст, без скриншота) и операцию записи, которая терпит неудачу. –

+0

Извините за отсутствие ясности. В настоящее время я отказываюсь от проверки на имена пользователей. –

ответ

0

Извините, если я опаздываю, но я столкнулся с подобной проблемой, я изменил мои имена пользователей править к следующему, который сделал трюк:

"usernames" : { 
    "$username": { 
    ".write": "!data.exists() && auth!= null && newData.val() == auth.uid" 
    } 
}, 
}