![](/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.