찾기 - firebase 이메일 인증




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

데이터 검색 중 :

데이터베이스에서 push() 사용하여 생성 된 임의의 ID를 사용하고 있으므로 데이터를 검색하려면 다음을 수행하십시오.

Android 앱에서 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;
  });
});

여기서 사용자의 스냅 샷 (데이터의 위치)을 얻은 다음 모든 임의의 ID를 루프하여 이름을 검색합니다.

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

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

Android 앱에서 Firebase 사용 :

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

Firebase with Javascript 사용하기

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" 는 것과 같아서 where name="Alex" 와 관련된 데이터를 검색합니다.

가장 좋은 방법은:

가장 좋은 방법은 Firebase Authentication을 사용하여 각 사용자에 대해 고유 한 ID를 생성하고 임의의 ID push() 대신 ID를 사용하므로 모든 사용자를 반복 할 필요가 없으므로 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) {
      }
 });

Firebase with Javascript 사용하기 :

    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;
   });

특정 사용자 계정에서 데이터를 가져 오거나 설정할 수있는 응용 프로그램을 만들려고하고 있으며 Firebase에 유혹을 받았습니다.

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

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

나는 주변을 둘러 보았고 ID로 임의의 해시를 부여 받았을 때 개별 데이터에 액세스하는 방법을 실제로 찾을 수 없습니다.

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


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);
});

가장 좋은 방법은 Firebase에서 제공하는 auth 객체를 기반으로 사용자의 ID를 정의하는 것입니다. 사용자를 만들 때 다음과 같은 작업을 수행합니다.

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

이 이드의 출처 :

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 인증 서비스는 uid에서 설정 될 모든 제공자들 사이에서 항상 고유 한 ID를 보장합니다. 이렇게하면 항상 auth.uid가 생기고 원하는 사용자에게 쉽게 액세스하여 다음과 같이 업데이트 할 수 있습니다.

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

다음 코드를 사용하여 세부 정보를 얻을 수 있습니다.

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가 특정 위치에서 모든 색인을 생성 하거나 모든 데이터를 다운로드하여 일부 하위 속성과 일치하는 요소를 찾아서 검색해야했습니다 (예 : name === "Alex" 인 모든 사용자).

2014 년 10 월 Firebase는 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() 추가하면 더 이상 하위 속성에 대한 쿼리에 대한 고유 인덱스를 만들 필요가 없습니다! 예를 들어 "Alex"라는 이름을 가진 모든 사용자를 검색하려면 다음과 같이하십시오.

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

여기 Firebase의 엔지니어. Firebase에 데이터를 쓸 때, 당신은 다른 어플리케이션 사용 사례를 반영 할 수있는 몇 가지 옵션을 가지고 있습니다. Firebase는 NoSQL 데이터 저장소이므로 고유 한 키를 사용하여 데이터 객체를 저장해야만 해당 항목에 직접 액세스하거나 특정 위치의 모든 데이터를로드하고 각 항목을 반복하여 찾고있는 노드를 찾을 수 있습니다 에 대한. 자세한 내용은 데이터 작성목록 관리 를 참조하십시오.

파이어베이스에 데이터를 쓸 때 고유 한 정의 된 경로 (예 : a/b/c )를 사용하여 데이터를 set 하거나 데이터를 목록으로 push 넣으면 고유 한 ID (즉 a/b/<unique-id> )를 사용하여 해당 목록의 항목을 시간순으로 정렬하고 쿼리 할 수 ​​있습니다. 위에서 보았던 고유 한 ID는 push 를 호출하여 online-b-cards/users 목록에 항목을 추가하여 생성됩니다.

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

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('[email protected]')) 
myUser.set({ email: '[email protected]', name: 'Alex', phone: 12912912 });

Firebase는 참조에있는 특정 문자를 허용하지 않기 때문에 (참조 만들기 참조 ),를 제거합니다 . 위 코드에서 a로 바꿉니다.


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

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입니다.