firebase身份验证-获取当前提供程序javascript

nle07wnf  于 2022-11-25  发布在  Java
关注(0)|答案(4)|浏览(124)

我试图找出我的用户正在使用什么供应商,我不知道如何!我使用的语言是vanilla javascript。
还有一个非常相似的问题:
Firebase Auth - get provider ID
但这只在swift 3中起作用...

new9mtju

new9mtju1#

正如链接的答案和Hareesh所说,由于一个用户可以登录到多个提供者,因此您需要遍历providerData数组。

user.providerData.forEach(function(providerData) {
    console.log("Signed in with "+providerData.providerId);
});

有关工作示例,请参阅:https://jsbin.com/vuzafuq/edit?html,js,output(检查JavaScript控制台中的实际提供程序)

wbgh16ku

wbgh16ku2#

我尝试了多个提供商。
如果你想得到所有已经登录的提供者用户,你可以使用user.providerData
但是providerData的顺序并不是基于Swift SDK声明的用户登录时间的降序。这不适用于Javascript SDK。
如果要获取当前提供者,可以解码包含当前登录提供者sign_in_provider的idToken。
格式如下所示

{
  .....
  "email": ....,
  "email_verified": true,
  "firebase": {
    "identities": {
      "google.com": [
        ....
      ],
      "email": [
        ....
      ]
    },
    "sign_in_provider": "password"
  }
}

您可以尝试通过https://jwt.io/解码或使用npm包jsonwebtoken解码。
在firebase 7.15.0上测试,希望这对你有用。

yqhsw0fo

yqhsw0fo3#

Firebase在用户对象内提供当前登录的提供者信息,如下所示(我在下面的示例中使用了AngularFire框架库)。

对于web平台,请参考以下代码:

import { AngularFireAuth } from '@angular/fire/auth';
import 'firebase/auth';

export class AuthenticationService {
   constructor(private auth: AngularFireAuth) { }

   getCurrentUser(){
      this.auth.onAuthStateChanged((user) => {
         if (user) {
            // User is signed in.
            user.getIdTokenResult()
                .then((idTokenResult) => {
                  let currentProvider = idTokenResult.signInProvider;
                  // The result will look like  'google.com', 'facebook.com', ...
                 });
         } else {
            // No user is signed in.
         }
      });
    }
}

有关详细信息,请查看官方文档here

ncecgwcz

ncecgwcz4#

2022答案(Firebase v8)

我一直在寻找一个简单的小JS snippit,但没有找到。也许这会帮助你:

// Gets the user's sign-in method
let signInMethod =
          firebase.auth().currentUser?.providerData[0]?.providerId;

相关问题