Ionic 2 + angularFire2を使用してモバイルアプリケーションを作成しようとしています。メッセージの受信者に読み取りアクセスを許可するFirebaseルール
私のデータベースは基本的にユーザーとメッセージで構成されます。ユーザーは電子メールとパスワードで認証されます。
ユーザーがでメッセージを交換します:受信者のメールが有効である場合は/検索
- のみ受信者によって
- メッセージが読み取り可能な受信者にメッセージを送信する
- 登録
サンプルデータ:
の"messages" : {
// message key
"-KbUpdXdFT6ggEqCXDd5" : {
"data" : "Lorem Ipsum",
"recipient" : "[email protected]",
"sender" : "[email protected]"
},
"-KbUr1_8AakzKjdwfmny" : {
"data" : "Some message",
"recipient" : "[email protected]",
"sender" : "[email protected]"
},
}
"users": {
// users key
"OpYYjG3iJsprgPNmhrNZ: {
"email": "[email protected]"
},
"bwEd48upa0e7h5ghKEpo":{
"email": "[email protected]"
}
}
サンプルルール:設定したルールで
"rules": {
"messages":{
// everyone is allowed to write new messages
".write": "auth != null",
"$message": {
// read only if you are an authenticated user and your email is the same as the recipient
".read": "auth != null && data.child('recipient').val() == auth.token.email"
},
"users":{
".read": "auth != null"
}
}
、ユーザーJohn Doeが受信したメッセージのリストを取得するには、このクエリを呼び出します。
messages = this.af.database.list('messages',{
query:{
orderByChild: 'recipient',
equalTo: "[email protected]"
}
});
問題: I 「クライアントには必要なデータにアクセスする権限がありません」というメッセージが表示され続けます。エラー。イムはそれを推測
はに何か持っている:私は他のさまざまなルールを試してみました
".read": "auth != null && data.child('recipient').val() == auth.token.email"
を、ない成功を収めました。メッセージがユーザーの下にあるよりネストされたデザインを考えても、それはアンチパターンと見なされたようです。
ヘルプ、アドバイス、チュートリアルは歓迎されます。ありがとうございました!
あなたのメールアドレスはあなたのauthペイロードに保存されていますか? これは、ユーザーテーブルに格納するのとは異なります。それが認証ペイロードにない場合は、それが問題になる可能性があります。トークンに含まれるものは、使用している認証方法によって異なります。 – arneson
ちょっとarneson、返事をいただきありがとうございます。 トークンにパスワードメソッドの電子メール変数があるかどうかは完全にはわかりません。 ドキュメントには、特定のアカウントのメールアドレスが含まれている必要があります[リンク](https://firebase.google.com/docs/reference/security/database/#authtoken) –
どの認証方法を使用していますか? – arneson