簡體   English   中英

如何檢查用戶是否剛剛在 firebase 中首次登錄 Google

[英]How to check if A user just Google signed in for first time in firebase

我有一個已經使用 Firebase 進行電子郵件和密碼身份驗證的 Android 應用程序。 為了用戶的方便,我現在還在項目中添加了 Google Sign-In。
問題是,當我使用電子郵件登錄時,應用程序會根據用戶的 uid(唯一用戶 ID - 通過 Firebase 身份驗證獲取)在密鑰下在實時數據庫上創建一些數據。 該數據通常在用戶注冊時創建。 但是,當用戶使用谷歌登錄功能時,他們會通過谷歌播放服務托管的另一個活動進行身份驗證。 我無法添加此數據。
所以,問題出現了,我現在應該怎么做來檢查用戶是否剛剛使用 Google 帳戶登錄。 此外,如果用戶第一次登錄 google,它將在實時數據庫中創建新數據,否則它將檢索數據。
請幫助我,因為我被卡住了。

試試, additionalUserInfo.isNewUser:

 var provider = new firebase.auth.GoogleAuthProvider(); firebase .auth() .signInWithPopup(provider) .then((result) => { console.log(result.additionalUserInfo.isNewUser) })

在JavaScript中,下面的方法firebase.auth().signInWithCredential返回firebase.auth.UserCredential具有屬性additionalUserInfo

additionalUserInfo有一個名為isNewUser的布爾屬性。

您可以對isNewUser進行簡單的檢查,以檢查用戶是否是第一次登錄。

耶! 如果數據已經存在於數據庫中,我找到了一種有效的方法。 它按我的意圖工作,如果我從 google/email 創建一個新用戶,我將他們的名字保存在實時數據庫中,但是從同一個帳戶登錄,早些時候導致在同一個地方重寫新數據(名稱) - 也是大量使用數據帶寬。 我是這樣解決的。 它只是檢查那里數據存在與否,然后進一步前進。

final User newUser = new User();
    newUser.email = user.getEmail();
    newUser.name = user.getDisplayName();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.hasChild("user/" + user.getUid())) {
                //User Exists , No Need To add new data.
                //Get previous data from firebase. Take previous data as soon as possible..
                return;
            } else {
                FirebaseDatabase.getInstance().getReference().child("user/" + user.getUid()).setValue(newUser);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

我要告訴你們一件事,User 是一個帶有 POJO 的自定義類,用於將數據放在 firebase 數據庫中。 如果這也適用於您,請回復我。

編輯 - Firestore

    newUser.email = user.getEmail();
    newUser.name = user.getDisplayName();
    DocumentReference docRef = 
    db.collection("users").document(user.getUid());
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull 
   Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Log.d(TAG, "DocumentSnapshot data: " + document.getData());
    //User Exists , No Need To add new data.
                    //Get previous data from firebase. Take previous data as soon as possible..
            } else {
                Log.d(TAG, "No such document");
   //Set new data here
            }
        } else {
            Log.d(TAG, "get failed with ", task.getException());
        }
    }
    });```

首次登錄時在數據庫中添加某種標志並使其成為現實。 每當用戶登錄時,檢查該標志是否存在並且為真,然后檢索舊數據,否則添加新數據(或任何您想要的)。

firstlogin: true

這是帶有 facebook 登錄的 javascript 代碼,您可能有一個想法。

  var provider = new firebase.auth.FacebookAuthProvider();
  function facebookSignin() {
    firebase.auth().signInWithPopup(provider)
     .then(function(result) {
        var user = result.user;
        firebase.database().ref('/users/'+user.uid).on('value', 
          function(snapshot){
             if (!snapshot.exists()) {
                 //user does not exist, add new data
             }else{
                 //user exist, retrieve old data
            }
       }); //firebase.database().ref ends
     });//then() ends
   }//function ends

您需要保存共享首選項並檢查用戶是否第一次登錄。

這個鏈接可以幫到你。 但在查看代碼之前,只需閱讀FIREBASE的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM