私のデータベースの構造は次のとおりです。iOS - Firebaseセキュリティルールまたはルールシミュレータで書き込み拒否エラーが発生しましたか?
root
|
@-users
| |
| @-uid
| |
| @-registration
| | |
| | |-completed: true
| |
| @-sneakersPath//registered users post/write sneaker for sale to this path
| |
| |
| @-autoID//i.e. xyz123
| |-sneakercondition: "used"
| |-sneakername: "nike"
|
|
@searchSnkPath//registered and anonymous users can search/read the sneakers for sale here
|
@-autoID//xyz123
|-sneakercondition: "used"
|-sneakername: "nike"
私が唯一使用できるユーザーでログインしてiOSアプリを開発していると私は私のバックエンドとしてFirebaseを使用しています。 Firebaseのサインイン方法の2つ、電子メール/パスワードと匿名を使用しています。私は電子メール/パスワードフィールドと匿名ユーザーとして入力するボタンを持つログインシーンを持っています。
ユーザーが
Email/Password
メソッドを使用してアカウントを作成します。が2つのシナリオがあります。彼らは電子メールとパスワードのフィールドに記入する必要があります。彼らは、このユーザーが永続的なUIDを取得し、
registration path
が作成されます。その登録パスで、私はcompleted:true
のキーと値のペアを追加します。その時点から、ユーザーのログインボタンを押してアプリに入ります(彼らは永続的なUIDでログインしています)。このユーザーは(write)
スニーカーをsneakersPath
に販売しています。また、彼らや他のユーザーが販売用に投稿したスニーカーについては、(read)
を検索することもできます。匿名ユーザーは、匿名ボタンである
Anonymous
メソッドを使用してアカウントを作成せずにアプリを使用します。彼らは匿名のエントリボタンを押して、彼らはアプリを入力することができます。そのボタンを押すと、一時的なuidを得ることができます(一時的なuidでログインしています)。このユーザーは匿名であるため、このユーザーが行うことができるのは検索(read)
です。第1シナリオの他のユーザーが販売のために投稿したものです。匿名でログインしてログアウトすると、別の一時的なUIDを取得します。私は、ユーザーが登録ユーザーとして、または、彼らは匿名ユーザであればログインしているかどうかを確認するためにclient side
上でチェックを実行し、両方の状況で
。これらのチェックに基づいて、匿名ユーザーがスニーカーを匿名で投稿するのを防ぐことができます。すべてが正しく機能しています。
私はiOS側のチェックを実行しますが、匿名ユーザーが何も投稿できないことを確認するためにFirebase Rulesにいくつかの追加の強制を加えたいと思います。また、kvp completed:true
のチェックを実行します。
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid && auth != null"
".write": "$uid === auth.uid && auth != null && root.child('users').child($uid).child('registration').child('completed').val() === true"
}
}
}
}
私はFirebaseルールシミュレータに行き、私が手に書き込もうとすると::
今の私のセキュリティルールがあるroot.child('users').child($uid).child('registration').child('completed').val() === true"
下の絵で
私が認証を「オン」に右に切り替えていると私が得た唯一の選択肢は匿名、グーグル、フェイスブック、ツイッター、およびカスタムました。私は電子メール/パスワードを使用しているので、リストには表示されません。カスタムを選択しました。私はそれが何のためにわからないので、管理者ボックスをチェックしていない。私は、JSONセキュリティルールで何か間違ったことや
アムは、私が間違ってルールシミュレータを使用していますか?
感謝を使用していずれか1でのfooのuidを置き換えることを確認することができます。セキュリティルールでは、===うまくいきます。私はちょうど ".read"でテストしました: "$ uid === auth.uid && auth!= null"それはそうではありませんでした。あなたはこの短いビデオを見ることができます:https://www.youtube.com/watch?v=qLrDWBKTUZo。私も提案したような実際のUIDを使ってみましたが、書き込みは拒否されました。とにかくありがとう –
あなたは私が正しいと私を理解していない。これら2つの演算子の間に違いがあります。もしあなたの値が '' true''ではなく '' true''であれば、**は問題になります。シミュレータが実際のデータベースにアクセスすることに注意したいと思います。 – creativecreatorormaybenot
これはその理由ではありません。私が提案したビデオ:youtube.com/watch?v=qLrDWBKTUZoを見て、すぐに2:56に進みます。ブール値をチェックするために===を使用する他の例も見てきました –