programing

Firebase를 사용하여 이름 속성별로 사용자 가져오기

css3 2023. 6. 29. 20:17

Firebase를 사용하여 이름 속성별로 사용자 가져오기

특정 사용자 계정의 데이터를 가져오거나 설정할 수 있는 앱을 만들려고 하는데 Firebase의 유혹을 받았습니다.

문제는 구조가 다음과 같은 경우 특정 사용자 데이터를 대상으로 지정하는 방법을 모른다는 것입니다.

My data structure described by the text below.

online-b-cards
  - users
    - InnROTBVv6FznK81k3m
       - email: "hello@hello"
       - main:  "Hello world this is a text"
       - name:  "Alex"
       - phone: 12912912

제가 둘러봤는데 개인 데이터에 액세스하는 방법은 물론이고 ID로 임의 해시가 제공될 때도 찾을 수 없습니다.

이름을 기반으로 개별 사용자 정보를 수집하려면 어떻게 해야 합니까?더 좋은 방법이 있다면 말해주세요!

이전에 Firebase에서는 일부 하위 속성(예: 모든 사용자)과 일치하는 요소를 찾고 검색하기 위해 자체 인덱스를 생성하거나 위치에 있는 모든 데이터를 다운로드해야 했습니다.name === "Alex").

10월에 Firebase ▁fire월▁in▁2014ying▁▁fire▁via▁new,▁out다니▁10출▁octoberbase습시를 통해 새로운 쿼리 기능을 출시했습니다.orderByChild()이러한 유형의 쿼리를 빠르고 효율적으로 수행할 수 있는 방법입니다.아래 업데이트된 답변을 참조하십시오.


Firebase에 데이터를 쓸 때는 여러 가지 사용 사례를 반영하는 몇 가지 다른 옵션이 있습니다.높은 수준에서 Firebase는 트리 구조의 NoSQL 데이터 저장소이며 데이터 목록을 관리하기 위한 몇 가지 간단한 기본 요소를 제공합니다.

  1. 고유한 알려진 키를 사용하여 Firebase에 씁니다.

    ref.child('users').child('123').set({ "first_name": "rob", "age": 28 })
    
  2. 기록된 시간별로 자동으로 정렬되는 자동 생성 키가 있는 목록에 추가:

    ref.child('users').push({ "first_name": "rob", "age": 28 })
    
  3. 고유한 알려진 경로를 통해 데이터의 변경 사항을 수신합니다.

    ref.child('users').child('123').on('value', function(snapshot) { ... })
    
  4. 또는 속성 값을 기준으로 목록의 데이터 필터링 또는 정렬:

    // Get the last 10 users, ordered by key
    ref.child('users').orderByKey().limitToLast(10).on('child_added', ...)
    
    // Get all users whose age is >= 25
    ref.child('users').orderByChild('age').startAt(25).on('child_added', ...)
    

의 추가와 함께.orderByChild()하위 속성에 대한 쿼리에 대해 더 이상 고유한 인덱스를 만들 필요가 없습니다!예를 들어, 이름이 "알렉스"인 모든 사용자를 검색하려면:

ref.child('users').orderByChild('name').equalTo('Alex').on('child_added',  ...)

파이어베이스의 엔지니어입니다.Firebase에 데이터를 쓸 때는 응용프로그램 사용 사례를 반영하는 몇 가지 다른 옵션이 있습니다.Firebase는 NoSQL 데이터 저장소이므로 데이터 개체를 고유한 키로 저장하여 해당 항목에 직접 액세스하거나 특정 위치에 있는 모든 데이터를 로드하고 각 항목을 반복하여 찾으려는 노드를 찾아야 합니다.자세한 내용은 데이터 쓰기목록 관리참조하십시오.

Firebase에서 데이터를 작성할 때 다음 중 하나를 수행할 수 있습니다.set고유한 정의된 경로(즉, 정의된 경로)를 사용하는 데이터.a/b/c), 또는push고유 ID(즉, 고유 ID)를 생성하는 데이터를 목록으로 변환합니다.a/b/<unique-id>시간별로 해당 목록의 항목을 정렬하고 쿼리할 수 있습니다.위에 표시된 고유 ID는 호출을 통해 생성됩니다.push목록에 항목을 추가하다online-b-cards/users.

사용하기 보다는push여기서, 저는 사용하는 것을 추천합니다.set사용자의 전자 메일 주소와 같은 고유한 키를 사용하여 각 사용자의 데이터를 저장합니다.그런 다음 다음으로 이동하여 사용자의 데이터에 직접 액세스할 수 있습니다.online-b-cards/users/<email>Firebase JS SDK를 통해.예:

function escapeEmailAddress(email) {
  if (!email) return false

  // Replace '.' (not allowed in a Firebase key) with ',' (not allowed in an email address)
  email = email.toLowerCase();
  email = email.replace(/\./g, ',');
  return email;
}

var usersRef = new Firebase('https://online-b-cards.firebaseio.com/users');
var myUser = usersRef.child(escapeEmailAddress('hello@hello.com')) 
myUser.set({ email: 'hello@hello.com', name: 'Alex', phone: 12912912 });

Firebase는 참조에서 특정 문자를 허용하지 않으므로(참조 작성 참조) 다음을 제거합니다..그리고 그것을 a로 대체합니다.,위의 암호로

다음 코드로 세부 정보를 가져올 수 있습니다.

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("users");
myRef.orderByChild("name").equalTo("Alex").addListenerForSingleValueEvent(new ValueEventListener() {           
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
                        Log.d(TAG, "PARENT: "+ childDataSnapshot.getKey());
                        Log.d(TAG,""+ childDataSnapshot.child("name").getValue()); 
                    }

Firebase에서 제공하는 Auth 객체를 기반으로 사용자의 ID를 정의하는 것이 가장 좋은 방법이라고 생각합니다.사용자를 생성할 때 다음 작업을 수행합니다.

FirebaseRef.child('users').child(id).set(userData);

이 ID의 출처:

var ref = new Firebase(FIREBASE);
var auth = $firebaseAuth(ref);
auth.$authWithOAuthPopup("facebook", {scope: permissions}).then(function(authData) {
    var userData = {}; //something that also comes from authData
    Auth.register(authData.uid, userData);
}, function(error) {
    alert(error);
});

Firebase 인증 서비스는 항상 모든 공급자 간에 고유 ID를 설정하도록 보장합니다.이 방법을 사용하면 항상 auth.uid를 갖게 되고 다음과 같이 원하는 사용자에게 쉽게 액세스하여 업데이트할 수 있습니다.

FirebaseRef.child('users').child(id).child('name').set('Jon Snow');

이것은 자동 생성된 고유 ID에 액세스할 때 도움이 되는 게시물의 해석이었습니다.AngularFire 암묵적 동기화를 사용하여 ng-repeat 내에서 Firebase 고유 ID 액세스

감사합니다, 벤니치(출처):

Firebase는 일반 Javascript 개체처럼 작동합니다.아마도 아래의 예를 통해 올바른 방향으로 나아갈 수 있을 것입니다.

<div ng-repeat="(name, user) in users">
    <a href="" ng-href="#/{{name}}">{{user.main}}</a>
</div>

편집: 원하는 결과를 100% 확신할 수는 없지만, '아하' 순간을 촉발시킬 수 있는 약간 더 있습니다.Firebase 대시보드에서 바로 액세스하려는 키를 클릭합니다.여기서 다음과 같은 기능을 사용할 수 있습니다.

var ref = new Firebase("https://online-b-cards.firebaseio.com/users/<userId>/name);
    ref.once('value', function(snapshot) {
        $scope.variable= snapshot.val();
});

Firebase에서 자동 생성된 고유 키에 액세스하는 방법: 데이터 구조: - OnlineBcards - UniqueKey

database.ref().on("value", function(snapshot) {
      // storing the snapshot.val() in a variable for convenience
      var sv = snapshot.val();
      console.log("sv " + sv); //returns [obj obj]

      // Getting an array of each key in the snapshot object
      var svArr = Object.keys(sv);
      console.log("svArr " + svArr); // [key1, key2, ..., keyn]
      // Console.log name of first key
      console.log(svArr[0].name);
}, function(errorObject) {
  console.log("Errors handled: " + errorObject.code);
});

가장 간단한 방법은 사용을 중지하는 것입니다..push(){}

임의 키를 생성할 함수입니다.하지만 대신에 사용합니다..update(){}임의 키를 갖는 대신 하위 키의 이름을 지정할 수 있는 함수입니다.

데이터 검색 중:

데이터베이스에서 다음을 사용하여 생성된 임의의 ID를 사용하고 있습니다.push()따라서 데이터를 검색하려면 다음을 수행합니다.

Android App에서 Firebase 사용:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("users");
ref.addListenerForSingleValueEvent(new ValueEventListener() {           
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot datas : dataSnapshot.getChildren()) {
                    String name=datas.child("name").getValue().toString();
                }
             }

            @Override
           public void onCancelled(DatabaseError databaseError) {
          }
     });

Javascript에서 Firebase 사용:

  firebase.database().ref().child("users").on('value', function (snapshot) {
   snapshot.forEach(function(childSnapshot) {
    var name=childSnapshot.val().name;
  });
});

이.users그런 다음 모든 임의의 ID 안으로 루프하고 이름을 검색합니다.


특정 사용자에 대한 데이터 검색:

특정 사용자에 대한 정보만 검색하려면 쿼리를 추가해야 합니다.

Android App에서 Firebase 사용:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("users");
Query queries=ref.orderByChild("name").equalTo("Alex");
queries.addListenerForSingleValueEvent(new ValueEventListener() {...}

Javascript와 함께 Firebase 사용

firebase.database().ref().child("users").orderByChild("name").equalTo("Alex").on('value', function (snapshot) {
   snapshot.forEach(function(childSnapshot) {
      var name=childSnapshot.val().name;
   });
});

용사를 합니다.orderByChild("name").equalTo("Alex")라고 말하는 것과 같습니다.where name="Alex"알렉스와 관련된 자료를 찾을 겁니다


최선의 방법:

Authentication을 ID 입니다.push()이렇게 하면 ID를 가지고 있고 쉽게 액세스할 수 있기 때문에 모든 사용자를 반복할 필요가 없습니다.

먼저 사용자가 로그인해야 합니다. 그러면 고유 ID를 검색하고 수신기를 연결하여 해당 사용자의 다른 데이터를 검색할 수 있습니다.

Android와 함께 Firebase 사용:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users");
String uid = FirebaseAuthentication.getInstance().getCurrentUser().getUid();

ref.child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
          @Override
         public void onDataChange(DataSnapshot dataSnapshot) { 
           String name=dataSnapshot.child("name").getValue().toString(); 
   }
         @Override
       public void onCancelled(DatabaseError databaseError) {
      }
 });

Javascript와 함께 Firebase 사용:

    var user = firebase.auth().currentUser;
    var uid=user.uid;

    firebase.database().ref().child("users").child(uid).on('value', function (snapshot) {
     var name=snapshot.val().name;
   });
 

인증된 사용자에 따라 고유 ID 둘러보기 데이터베이스를 추가하는 가장 간단하고 좋은 방법은 다음과 같습니다.

private FirebaseAuth auth;

String UId=auth.getCurrentUser().getUid();

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users");

User user = new User(name,email,phone,address,dob,bloodgroup);

myRef.child(UId).setValue(user);

UID는 인증된 특정 전자 메일/사용자의 고유 ID입니다.

언급URL : https://stackoverflow.com/questions/14963776/get-users-by-name-property-using-firebase