Firebaseコンソールに2人のユーザが作成されていますが、どちらもユーザ名とメールアドレスが異なります。Swift + Firebaseセキュリティが動作しない
オンラインでスコアをデータベースに保存できるようにします。
let baseRef = FIRDatabase.database().reference(withPath: "GameStats/" + user.uid + "")
let scoreRef = scoreRef.child("Score")
scoreRef.observe(.value, with: { snapshot in
print(snapshot.value)
})
私は2人のユーザが他のユーザからのその他の情報にアクセスできるかどうかをテストしたかった:それは私はこの使用しています同期
AppName
- GameStats
- DBW9WQEs2sQn9CuPTE9t7Q1qWSz2
- Score : 0986
- Li75C2BYW7bQnKqMmrqLAZ67HUy4
- Score : 44131
この値にアクセスし、維持するために:これは構造体です。私はそうのような他のuser.uid
を含めるように行を変更:
let baseRef = FIRDatabase.database().reference(withPath: "GameStats/Li75C2BYW7bQnKqMmrqLAZ67HUy4")
// Logged in User: DBW9WQEs2sQn9CuPTE9t7Q1qWSz2
、それはこれを出力し、いくつかの理由のために:
Optional(44131)
私は、データベース内の値を変更した場合、それは自動的に値を更新します私が置いたもの。
これは間違ったユーザーで、なんらかの理由でアクセスできます。
これらは私のルールです:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"GameStats": {
"$user_id": {
".write": "auth != null && auth.uid === $user_id && auth.provider === 'password'",
".read": "auth != null && auth.uid === $user_id && auth.provider === 'password'"
}
}
}
}
はなぜアプリがあるユーザーが別のユーザーのデータを読み取るために、ユーザーが唯一の自分のユーザーIDの下でデータにアクセスできるように、どのように私はアクセスを制限しないことができていますか?
@M_Gが示唆しているように、私は.write
を親から、.read
を取り出しました。だから私のルールは次のようになります。
{
"rules": {
// ".read": "auth != null",
// ".write": "auth != null",
"GameStats": {
"$user_id": {
".write": "auth != null && auth.uid === $user_id && auth.provider === 'password'",
".read": "auth != null && auth.uid === $user_id && auth.provider === 'password'"
}
}
}
}
私は今、この出力を得る:
[FirebaseDatabase] setValue: or removeValue: at /GameStats/DBW9WQEs2sQn9CuPTE9t7Q1qWSz2 failed: permission_denied - This is for the correct user too. I get this error if wrong user also.
一般的な '.write'ルールを削除しようとしましたか? –
@M_Gあなたは ".write": "auth!= null"を意味しますか?これらのルールは親を参照するだけですが。したがって、子ルールの指定 – JamesG
GameStatsの書き込みルールが正しいと思われるので、試してみます。 –