![](/img/trans.png)
[英]How to sign in a user with email and password with firebase + svelte?
[英]How to determine if the user signed in to Firebase with email and password or with google sign in?
@mjrdnk 的回答是正確的,但有一個警告,一個用戶可以鏈接多個提供者。 因此,使用firebase.auth().currentUser.providerData[0].providerId
將始終產生相同的提供者,即使使用另一個鏈接的提供者登錄。確定用於簽名的當前提供者的最准確方法是檢查 ID令牌的字段: firebase.sign_in_provider
。
您可以通過使用 currentUserhttps://firebase.google.com/docs/reference/js/firebase.UserInfo來確定
像這樣:
firebase.auth().currentUser.providerData[0].providerId
希望這會有所幫助。
目前@mjdnk asnwer 已棄用,因為它將始終提供第一個提供者而不是最后一個登錄的提供者。
所以最近的解決方案是:
正如這里所指出的
var uiConfig = {
callbacks: {
signInSuccessWithAuthResult: function(authResult, redirectUrl) {
var providerId = authResult.additionalUserInfo.providerId;
localStorage.setItem("firebaseProviderId", providerId)
//...
},
//..
}
並在頁面中顯示
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
user.getIdToken().then(function (idToken) {
$('#user').text(welcomeName + "(" + localStorage.getItem("firebaseProviderId")+ ")");
$('#logged-in').show();
}
}
});
@mjrdnk 的答案是正確的,但有些情況未涵蓋在答案中,因此我發現此解決方案在所有情況下(我已經測試過)都效果最佳。
val user = firebaseAuth.currentUser
user?.let {
authProvider = when (it.providerData[it.providerData.size-1].providerId) {
"phone" -> {
ConnectedUser.LOGIN_PROVIDERS.PHONE
}
"password" -> {
// Email and password
ConnectedUser.LOGIN_PROVIDERS.EMAIL
}
else -> {
ConnectedUser.LOGIN_PROVIDERS.UNKNOWN
}
}
.
.
.
精彩的信息來源:FirebaseUI for Auth
一些提供程序名稱如下(有關更多信息,請參見上面的源代碼):
ANONYMOUS_PROVIDER = "anonymous"
EMAIL_LINK_SIGN_IN_METHOD = "emailLink"
EMAIL_PASSWORD_SIGN_IN_METHOD = "password"
MICROSOFT_PROVIDER = "microsoft.com"
YAHOO_PROVIDER = "yahoo.com"
APPLE_PROVIDER = "apple.com"
PHONE = "phone"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.