2017-06-14 78 views
1

我正在玩弄FirebaseUI-Android,並且對唯一標識用戶時使用的ID有疑問。 FirebaseUI管理身份驗證權並返回IdpResponse對象。這可以是例如臉書,推特,手機等等。這是感謝所有背後的人。自定義Firebase用戶身份不使用Firebase用戶uid

因爲FirebaseUser.getUid()可以改變,當用戶刪除/重新創建他的帳戶,因此我不想鏈接我的用戶數據與FirebaseUser.getUid()令牌。

未來,如果我決定讓用戶在那裏擦拭帳戶,當用戶返回時,用戶的所有用戶歷史記錄都將無法訪問。同樣在未來,如果我將我的系統遷移到某個地方,那麼uid不會那麼方便地擁有權利嗎?

現在我創建了這個包裝器(下面的代碼)來創建一個從IdpResponse中的數據外推的唯一ID。真的不知道,但我想這樣做,除非有Google 2.0,否則不會有「身份證」衝突。 Twitter2.0 :)正確。同時,更容易在系統中排除錯誤,因爲id不是UUID。

這是處理用戶ID問題的推薦方法。我真的需要一些反饋和陷阱來警告這件事。

@Override 
public String getUserId() { 
    String userId; 
    FirebaseUser user = getInstance().getCurrentUser(); 
    if (user.getEmail() != null) 
     // User sign in with E-Mail 
     userId = user.getEmail().replace(".", ","); 
    else if (user.getPhoneNumber() != null){ 
     // User sign in with Phone 
     userId = user.getPhoneNumber(); 
    }else 
     // User sign in with Twitter or Facebook 
     userId = user.getUid(); 
    return userId; 
} 

最令打擾我,這是Twitter或Facebook,因爲我仍然要使用FirebaseUser.getUid()IdpResponse.getIdpToken()對我們更好嗎?

回答

0

正如你在你的文章中提到的,使用uid不是最好的選擇。如果用戶刪除其帳戶並嘗試創建另一個帳戶,則會生成另一個uid。所以在這種情況下,他會損失所有數據歷史記錄。 識別用戶的最好方法是使用email address。該電子郵件地址是獨一無二的,易於使用,並且如果將來需要根據電子郵件地址將Google accountFacebook accountTwitter account關聯起來,您將能夠做到這一點。由於火力地堡不會在關鍵的接受.符號,我建議你編碼的電子郵件地址是這樣的:

[email protected] - >名@電子郵件,COM

正如你可能看到,我已將昏迷符號.更改爲昏迷,。爲了達到這個我重溫你使用這種方法:

static String encodeUserEmail(String userEmail) { 
    return userEmail.replace(".", ","); 
} 

static String decodeUserEmail(String userEmail) { 
    return userEmail.replace(",", "."); 
} 

希望它有幫助。

+0

謝謝我在想同樣的事情。 –

+0

所以,如果您認爲我的回答對您有幫助,請考慮接受並給予+1。謝謝! –

相關問題