2014-02-16 3 views
16

새로운 사용자가 등록 할 수 없도록 firebase 이메일/비밀번호 계정을 등록하지 못하도록 제한하는 방법이 있습니까? 나는 소수의 관리자 만이 접근 할 수있는 작은 응용 프로그램을 가지고있다. (Firebase 관리자에서 수동으로 생성 한) 그리고 지금은 아무 것도 작은 자바 스크립트를 삽입하고 계정을 등록 할 수있는 것처럼 보인다.firebase에 등록을 제한하는 방법이 있습니까

+0

[답변과 답변] (http://stackoverflow.com/questions/17719703/how-do-i-restrict-signup-to-a-product-in-firebase). 즉, 사용자 정의 로그인을 사용하거나 권한이없는 계정에 대한 읽기/쓰기를 방지하십시오. – Kato

답변

29

Firebase Simple Login은 편의상 Firebase Custom Login 위에 구축 된 추상화입니다. 전자 메일/암호 인증을 사용할 때 전자 메일과 암호 간의 매핑을 만들고 보안 규칙에 사용할 자동으로 인증 토큰을 생성한다는 점에 유의해야합니다.

구체적인 경우 모든 "admin"사용자가 이미 생성 된 경우 보안 규칙을 통해 원하는 동작을 얻을 수 있습니다. 예를 들어 Firebase 데이터 트리에 대한 읽기/쓰기 권한을 해당 목록에있는 인증 된 사용자에게만 허용하려면 "admins"목록에 해당 사용자가 있어야하는 최상위 읽기/쓰기 보안 규칙을 작성하십시오.

{ 
    ".read" : "auth != null && root.child('admins').hasChild(auth.uid)", 
    ".write" : "auth != null && root.child('admins').hasChild(auth.uid)" 
} 

위의 규칙은 사용자가 (auth != null을 통해) 인증되고 인증 된 사용자의 ID가 관리자 목록에 있어야합니다 (root.child('admins').hasChild(auth.uid)).

마지막 단계는 해당 사용자를 admins 하위 트리에 작성하여 실제로 관리자로 지정하는 것입니다. 의 당신이 사용자 1, 4 있다고 가정 해 봅시다, 그리고 7, 관리자을 다음 반영하기 위해 데이터 트리를 업데이트 :이 결과로

{ 
    ... 
    "admins": { 
    "1": true, 
    "4": true, 
    "7": true 
    } 
} 

, 다른 사용자가 새 이메일/비밀번호 매핑을 생성 할 수있는 경우에도 Firebase Simple Login을 사용하면 이러한 매핑은 보안 규칙을 사용하여 제한되므로 응용 프로그램에 아무런 영향을 미치지 않습니다.

+0

좋은 답변입니다. 도와 줘서 고마워! – binaryorganic

+0

나는 Bolt에 "root.child ('admins'). hasChild (auth.uid)"라고 쓰려고합니다. "root.admins.uid! = null"로 가정 하겠지만 "root.child ('admins')로 변형됩니다. child ('uid') .val()! = null"그런 다음 실행합니다. 작동하지 않음 = ( – Anders

+1

root.admins [auth.uid]! = null – mckoss

7

@RobDiMarco는 훌륭한 답변을 제공했지만 결함이 있습니다.

auth.uid이 빈 문자열이 될 경우 root.child('admins').hasChild(auth.uid) 규칙이 통과합니다.

uid 필드 ({ "provider": "anonymous", "uid": ""})를 지우고 Firebase 데이터베이스 보안 시뮬레이터에서이를 테스트 할 수 있습니다.

Simulation results

이 규칙 root.child('admins').child(auth.uid).val() === trueuid에 통과하지 않습니다.

관련 문제