firebase auth - 获取当前的提供者 javascript

Joa*_*sen 6 javascript firebase firebase-authentication

我试图找出我的用户使用的提供商,但我不知道如何!我使用的语言是 vanilla javascript。
有一个非常相似的问题:
Firebase Auth - get provider ID
但这仅适用于 swift 3 ...

Fra*_*len 9

正如链接的答案和 Hareesh 所说,您需要遍历providerData数组,因为用户可以使用多个提供商登录。所以:

user.providerData.forEach(function(providerData) {
    console.log("Signed in with "+providerData.providerId);
});
Run Code Online (Sandbox Code Playgroud)

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


Aru*_*j R 6

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.
         }
      });
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看此处的官方文档


鄭元傑*_*鄭元傑 5

我尝试过多个提供商。
如果您想获取用户已登录的所有提供商,您可以使用user.providerData.
但providerData的顺序并不是按照Swift SDK声称的用户登录时间的desc顺序。这不适用于 Javascript SDK。

如果你想获取当前的提供者,你可以解码包含当前登录提供者的 idToken sign_in_provider
格式会是这样的

{
  .....
  "email": ....,
  "email_verified": true,
  "firebase": {
    "identities": {
      "google.com": [
        ....
      ],
      "email": [
        ....
      ]
    },
    "sign_in_provider": "password"
  }
}
Run Code Online (Sandbox Code Playgroud)

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