繁体   English   中英

如何确定用户是使用电子邮件和密码登录 Firebase 还是使用 google 登录?

[英]How to determine if the user signed in to Firebase with email and password or with google sign in?

我正在登录 Web 应用程序,并且我已经做到了,因此用户可以使用他们的电子邮件和密码手动登录或使用谷歌登录。有没有办法确定他们使用的方法? 最好使用 Firebase 身份验证状态更改功能。

`firebase.auth().onAuthStateChanged(firebaseUser => {....`

我知道当您进入 Firebase 控制台日志时,您可以知道他们是如何登录的,但是有没有办法使用 JavaScript 代码来确定它?

使用firebase.auth().currentUser.providerData 在此处输入图片说明

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM