Firebase를 사용하여 생성하는 iOS 앱에서 각 사용자는 이메일과 비밀번호로 가입 한 후 고유 한 사용자 이름을 만듭니다. [email protected]의 이메일을 가진 사용자가 다음 가입 및 더라면 왜이 Firebase 데이터베이스 보안 규칙은 && 및 || 작동하지 않음
그래서 다음과 같이 데이터베이스의 조각이 될 것이다 사용자 이름의 데이터베이스에없는 고유 한 사용자 이름을 만들 수 있었다 :"usernames" : {
"test" : "r6KPesUr1qORfIJke07SloZHeNW2",
"test1" : "jSMSkY9rHtdNkXoLrsFmCAXdY9n2",
"test7" : "jnFhJbgCjZeJFx0hspObqoskQej2",
"test8" : "HtnULzU0lnZKYva2M2Wepl6N8wE3"
},
"users" : {
"HtnULzU0lnZKYva2M2Wepl6N8wE3" : {
"email" : "[email protected]",
"username" : "test8"
},
"boX6rtJ98haWVxNoXfSq21maCVU2" : {
"email" : "[email protected]"
},
"jSMSkY9rHtdNkXoLrsFmCAXdY9n2" : {
"email" : "[email protected]",
"username" : "test1"
},
"jnFhJbgCjZeJFx0hspObqoskQej2" : {
"email" : "[email protected]",
"username" : "test7"
},
"r6KPesUr1qORfIJke07SloZHeNW2" : {
"email" : "[email protected]",
"username" : "test"
}
}
사용자가 가입을 완료했을 때 고유 한 사용자 이름인지 확인하기 위해 다음과 같은 보안 규칙이 있습니다. 내가
(!root.child('usernames').hasChild($username.toLowerCase()) &&
newData.val() == auth.uid &&
root.child('users').hasChild(auth.uid))
을 거랑해야하기 때문에이 세 가지 진술을하고 싶은 유효성 검사 규칙에 대한이 두 문을
// USERNAMES
"usernames": {
".read": "auth.uid != null",
".write": "auth.uid != null",
"$username": {
".validate": "(!root.child('usernames').hasChild($username.toLowerCase()) && newData.val() == auth.uid &&
root.child('users').hasChild(auth.uid)) &&
(root.child('users/'+auth.uid+'/username').val().toLowerCase() == $username ||
!root.child('users/'+auth.uid+'/username').exists())"
}
}
그들 중 하나
"(root.child('users/'+auth.uid+'/username').val().toLowerCase() == $username ||
(!root.child('users/'+auth.uid+'/username').exists()"
그렇다면 사실이있다 사용자가 test5으로 가입하려면 다음 json과 사용자 이름을 입력하십시오. 그러면 현재 보안 규칙의 첫 번째 부분으로 인해 작동하지 않습니다. OR 진술.
"users": {
"boX6rtJ98haWVxNoXfSq21maCVU2": {
"username": "test5"
}
}
내가 뭘 잘못하고 있니?
규칙을 분석하는 것은 상당히 어렵습니다. 이 유효성 검사 규칙에 의해 거부 될 수있는 최소 코드를 포함하도록 질문을 편집 할 수 있습니까? –
@FrankvanPuffelen 확실한 것. 필자는 데이터베이스가 어떻게 보이는지, json이 [email protected] – Edward
OK라는 이메일을 사용하여 사용자의 고유 한 사용자 이름을 작성하는 데 실패한 것을 추가했습니다. 나는 당신의 유스 케이스를 알아내는 것을 시도했다. 그러나 이러한 복잡한 규칙을 이해하는 것은 까다로울 수 있으므로 특정 유스 케이스 하나를 격리하고 이에 초점을 맞 춥니 다. –