수색…


사용자 프로필 데이터를 저장하는 방법

모든 인증 된 사용자는 모든 공급자에서 고유 한 Firebase 사용자 uid 를 가지며 모든 인증 방법의 결과로 반환됩니다.

사용자의 데이터를 저장하는 좋은 방법은 모든 사용자의 데이터를 유지하고 보안 규칙을 사용하여 노드를 보호하는 노드를 만드는 것입니다

- 데이터베이스

{
   "users": {
      "uid1" : {
         "name": "Steve",
         "surname": "Jobs"
      },
      "uid2" : {
         "name": "Bill",
         "surname": "Gates"
      }
   }
}

- 보안

{
    "rules": {
        "users": {
            "$uid": {
                // If node's key matches the id of the auth user
                ".write": "$uid == auth.uid"
            }
        }
    }
}

위의 규칙에서 $uid 는 소위 "달러 변수"이며,이 규칙은 그 아래의 규칙이 users 모든 하위 노드에 적용되도록합니다. 자세한 내용은 $ 변수를 사용하여 경로 세그먼트를 캡처하는 방법 에 대한 설명서를 참조하십시오.

왜 사용자 데이터를 데이터베이스에 저장합니까?

Firebase 인증을 사용하면 앱 사용자가 소셜 공급자 또는 이메일 + 비밀번호로 로그인 할 수 있습니다. 하지만 Firebase 인증으로 지정할 수있는 것 이상으로 사용자에 관한 추가 정보를 저장하려면 어떻게해야합니까?

또는 앱의 사용자 목록을 표시하려면 어떻게해야합니까? Firebase 인증에는 API가 없습니다.

대부분의 개발자는 별도의 데이터베이스에 추가 정보를 저장하여이 문제를 해결합니다. 이 주제에서는 Firebase Realtime Database 에 그러한 정보를 저장하는 방법을 설명합니다.

실시간 데이터베이스의 사용자 계정 데이터 처리

Firebase 인증 시스템은 사용자 uid , displayName , photoURLemail 의 소스입니다. 암호 기반 계정은 .updateProfile 메소드를 통해 인증 시스템에서이 영구 값을 설정합니다. 이러한 값을 실시간 데이터베이스, rDB, users 노드에 저장하면 부실 데이터 문제가 발생합니다. 예를 들어 표시 이름이 변경 될 수 있습니다. 이러한 값을 동기화 상태로 유지하려면 .onAuthStateChange 와 함께 로컬 저장소 를 사용 .onAuthStateChange .

모든 .onAuthStateChange

  • getItem('displayName')getItem('photoURL')
  • user.displayNameuser.photoURL 과 비교 user.photoURL
  • 다른 경우
    • setItem('displayName')setItem('photoURL')
    • db.ref.child('users').update displayName 및 / 또는 photoURL 값을 db.ref.child('users').update 하십시오 db.ref.child('users').update

.onAuthStateChange 는 모든 페이지로드 또는 .onAuthStateChange 고침 및 모든 인증 상태 변경시 실행됩니다. 잠재적으로 자주 발생합니다 (예 : 다중 페이지 응용 프로그램). 그러나 로컬 스토리지에 읽고 쓰는 것은 동기적이고 매우 빠르므로 앱 성능에 눈에 띄는 영향은 없습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow