2016-06-06 2 views
2

나는 사람이 읽고 관리하기가 더 쉬운 방식으로 데이터베이스의 사용자를 구성하고자합니다.전자 메일 주소 또는 사용자 ID로 사용자 데이터 구성

사용자 : 대신에 사용자 ID의 속성 이름으로 사용자의 이메일 주소를 사용 내가 그룹의 사용자 목록이있는 경우, 그들은 목록으로 읽을 수 있도록

"Users" : { 
    "[email protected]":{ 
     "id": "DK66qu2dfUHt4ASfy36sdfYHS9fh", 
     "name": "A Display Name", 
     "groups": { 
     "moderators": true, 
     "users": true 
     } 
    }, 
    {...} 
    } 

사용자 ID 목록이 아닌 전자 메일.

그룹과 같은 :

"Groups": { 
    "moderators":{ 
     "name": "moderator", 
     "members": { 
     "[email protected]": true, 
     "[email protected]": true 
     } 
    } 
    } 

그룹 대신 :

"Groups": { 
    "moderators":{ 
     "name": "moderator", 
     "members": { 
     "DK66qu2dfUHt4ASfy36sdfYHS9fh": true, 
     "K2fkHYQDFOge3Hw7SjRaGP3N2sdo": true 
     } 
    } 
    } 

그러나, 규칙을 사용하여 사용자의 속성을 확인하는 (예 : 자신의 그룹으로) 필요 내가 위의 목록과 같은 두 개의 사용자 목록을 유지하고 또 다른 본질적으로 ID와 전자 메일 주소의 키 - 값 쌍 테이블을 유지하여 사용자의 전자 메일 주소를 uid.

의사 코드 규칙 : 중포 기지와Users[UsersKeyVal[auth.uid]].groups.moderator == true

, 가장 허용 연습 무엇을 간주됩니다? 두 가지 장점과 단점은 무엇입니까?

+0

직접 중포 기지로 사용자 로그를 가지고 읽고 중포 기지를 통해 수동으로 데이터를 옴 할 계획인가를 해결 계기반? – Jay

+0

@Jay 슬프게도 다른 사용자가 새 전자 메일/암호 사용자를 만들려면 이러한 작업의 기본 동작은 자동으로 새로 만든 사용자로 로그인해야하기 때문에 필요합니다. 나 또는 다른 관리자가 다시 로그 아웃해야합니다. 다음 우리 자신의 계정으로 다시 데이터베이스에 사용자를 설정합니다. firebase 콘솔을 통해 새로운 사용자를 추가하는 것이 더 쉽고 덜 어색합니다. 내가 프로그래밍 방식으로 처리 할 수있을 때까지 인간이 읽을 수있게 만드는 것을 고려한 이유는 무엇인가. 그러나 귀하의 답변을 읽은 후에는 그렇지 않을 수도 있습니다. –

답변

1

이메일 주소로 사용자 데이터를 저장하지 마십시오. 이것은 나중에 큰 문제가 될 것입니다.

사용자 노드는 결론이 일반적으로는 노드의 키에서 노드에 저장된 동적 데이터 연결을 해제하는 것이 좋습니다 있다는 것입니다 '표준'중포 기지 디자인 패턴

users 
    uid_0 
    name: 
    gender: 
    etc 
    uid_1 
    name: 
    gender: 
    etc 

을 따라야합니다.

왜?

[email protected]에 대한 모든 종류의 링크와 참조로 복잡한 구조를 작성한 다음 @ mycoolcompany.com을 @ mynotsocoolcompany.com에서 가져 오는 경우를 가정 해보십시오. 그러면 전체 데이터베이스에서 프랭크의 이메일에 대한 모든 참조를 다시 작성해야합니다. 우.

그러면 사용자가 100 명 또는 1000 명인 경우 @ mycoolcompany.com은 어떻게 될까요? 아야.

위와 같이 제안 된 구조와 같이 데이터의 연결을 해제하면 노드 내의 이메일 주소 만 변경하면됩니다. 다른 모든 기능은 작동합니다.

, 스택 오버 플로우에이 답변 읽어 보시기 바랍니다 - Firebaser에 의해 작성하고 귀하의 질문에

Firebase data structure and url

+0

Jay, 답장을 보내 주셔서 감사합니다. 이는 의미가 있으며 내가 바라는 정확한 통찰력 유형입니다. 그 대답을 연결해 주셔서 감사합니다, 그것은 매우 계몽적입니다. 내가 수동으로 데이터베이스에 사용자 데이터를 설정하고 인증을 프로그래밍 방식으로 전자 메일/비밀 번호 사용자를 만들 수 없기 때문에 그것은 OP에서 그렇게하는 것을 고려하고있는 유일한 이유입니다. 그래서 나 자신과 다른 사용자를 추가 할 수 있어야하는 사용자는 사이트에서 관리자 패널을 만드는 대신 firebase 대시 보드에 직접 액세스해야합니다. –

+0

Firebase는 코드로 사용자를 쉽게 생성 할 수 있습니다. 우리는 항상 그것을한다. 'admin'사용자에게 필요에 따라 사용자를 추가하거나 변경할 수있는 프런트 엔드 UI를 제공하는 것이 훨씬 쉬울 것입니다. – Jay

+0

이것은 OP의 제 질문과 관련이 없지만 어떻게됩니까? 새로운 사용자를 생성하는 유일한 방법은 'createUserWithEmailAndPassword' API 메소드 [여기] (https://firebase.google.com/docs/reference/js/firebase.auth.Auth#createUserWithEmailAndPassword)를 통해 로그인하는 것입니다 자동으로 새로 생성 된 사용자로 데이터베이스 정보를 추가하는 것은 프로그래밍 방식으로 수행 할 수 있지만 실제로는 사용자의 인증을 작성하는 것은 afaik가 할 수 없습니다. –

2

제 생각에는 데이터 구조에는 문제가 없습니다.

Doc

에 따른 본 양방향 관계위한 필요한 중복이다.

firebase에서 생성 된 UId 또는 사용자 정의 ID (여기에 전자 메일)를 사용하면 firebase 작동 방식이 변경되지 않습니다. 전자 메일이 고유한지 확인해야합니다.

+0

감사합니다. Crema. 그러나 조금만 생각한 후에는 전자 메일 주소와 사용자 ID의 키 - 값 쌍인 다른 데이터 묶음을 유지하는 것이 중요합니다. 어떤 종류의 ID로 이메일 주소를 사용하고 Firebase auth에는 authe'd 사용자의 uid 만 포함되어 있기 때문에 필요한 것입니다. 전자 메일 대신 사용자 ID를 사용하면 필요하지 않습니다. 이 경우 중복 데이터를 3 배 이상 보유하게됩니다. –

+0

아하이. 내 검증 규칙에 회원 이메일을 직접 사용할 수있는 맞춤 인증 시스템을 사용하고 있기 때문에이 부분을 잊어 버렸습니다. – Crema

+0

오, 내가 이것을 읽을 수있는 참고 자료가 있습니까? 암호와 같은 사용자 정보 저장소/보안이 여전히 firebase에서 처리됩니까? –

관련 문제