2016-08-19 8 views
0

Firebaseのデータベースを使用してユーザー情報を格納するWebサイトを作成しようとしています。一意のユーザー名を使用したい私は2つのインデックスを持っています。一つはユーザー用、もう一つはユーザーネーム用です。固有のユーザー名の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でユーザ名を設定する場合にのみ使用またはそれ自身の$ UIDを持つものではユーザ名でない記述することができます。

私は値が認証されたユーザーのuidであり、キーがユーザー名であるデータのみが必要です。私はこれを働かせることはできません。私はnewData()。val()を間違って使用していると思われます。私のvalidateステートメントが失敗しています。

私はカスタムトークンを使用しないようにしたいと思いますが、私は任意の提案に開放しています。前もって感謝します。

申し訳ありませんがこの説明があまりにも引き出されている場合、これはStackOverflowの私の2番目の投稿です。

編集#2 私は教えてもらえることからいくつかの研究を行いましたが、ドキュメントの中で.child()を.val()の前に使用する必要があることがわかりましたが、.childの代わりに.child設定されたユーザ名。

+1

が、あなたドンそれがうまくいかないと言っていません。値に関係なく検証が失敗するか、合格に合格しますか? – cartant

+0

私はここでカートマンと付き合っています。一見、ルールはよく見えます。何が失敗していますか?このような場合は、現在のJSON(テキストとして、スクリーンショットなし)と失敗した書き込み操作を確認するのに役立ちます。 –

+0

明快さの欠如について申し訳ありません。私は現在、ユーザー名の検証に失敗しています。 –

答えて

0

申し訳ありませんが、私は遅刻が、私は同様の問題に遭遇した場合、私は私のユーザー名は、トリックをした次のようにルール変更:あなたはそれが仕事を得ることができないと言う

"usernames" : { 
    "$username": { 
    ".write": "!data.exists() && auth!= null && newData.val() == auth.uid" 
    } 
}, 
} 
関連する問題