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