firebase auth - 获取当前提供者javascript

时间:2017-11-19 17:44:38

标签: javascript firebase firebase-authentication

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

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

我尝试了多个提供商。
如果要让所有用户都已登录,请使用user.providerData
但是providerData的顺序不是基于Swift SDK要求的用户登录时间的desc顺序。 这不适用于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上进行测试,希望对您有用。

答案 2 :(得分:1)

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

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

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.
         }
      });
    }
}

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