2017-09-05 4 views
0

최근에 데이터베이스 규칙이 데이터베이스에 이미 동일한 데이터가 있는지 여부를 확인하도록 설정할 수 있지만 현재는 동일한 데이터가 삽입되었지만 사용자 이름과 전자 메일의 동일한 입력을 확인하고 방지하는 방법을 확인했습니다 ?Firebase 실시간 데이터베이스 유효성 검사 사용자 이름 및 전자 메일

{ 
"rules": { 
     ".read": true, 
    ".write": true, 
     "username":{ 
     ".validate": "!root.child('username').child(newData.val()).exists()" 
     }, 
     "email":{ 
     ".validate": "!root.child('email').child(newData.val()).exists()" 
     } 

     } 
    } 

루트 하위 항목은 전자 메일 인증 uid로 만들어지고 나머지는 동일한 노드 아래에 있습니다.

enter image description here

어떻게 사용자가 동일한 사용자 이름과 이메일 주소를 입력 방지하기 위해?

답변

0

귀하의 규칙은 단일 속성 /username이 존재하고 사용자가 작성한 새 데이터와 동일한 값을 갖고 있는지 확인합니다. 유스 케이스가 다른 것처럼 보입니다. 모든 사용자에 대해 고유 한 사용자 이름을 지정하려고합니다.

Firebase의 보안 규칙에서 여러 노드에 걸쳐 고유 한 값을 보장 할 수 없습니다. 대신

usernames 
    "rexyou0831": "ik3sf...." 

상기 데이터 구조는 사용자 이름 ik3sf...rexyou0831 주장 것을 나타낸다, 즉, 별도의 컬렉션의 키로서 사용자 이름을 저장해야한다. 이러한 구조를 사용하면 키가 정의상 컬렉션에서 고유해야하므로 사용자 이름이 고유해야합니다. 당신은 사용자는 새 이름을 쓰거나으로 자신의 이름을 삭제 할 수 있도록 할 수 있습니다

{ 
    "rules": { 
    "usernames": { 
     "$name": { 
     ".write": "!data.exists() || newData.val() === data.val()" 
     } 
    } 
    } 
} 

너무 이메일 주소의 고유성을 적용하려면, 당신은 사람들을 위해 유사한 컬렉션을 만들 필요가있을 것이다.

자세한 설명은

이 같은 주제를 다루는 이전 질문 중 하나를 읽고

관련 문제