【问题标题】:firebase auth - get current provider javascriptfirebase auth - 获取当前提供者 javascript
【发布时间】:2018-05-02 23:05:11
【问题描述】:

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

【问题讨论】:

  • Firebase SDK 跨平台非常一致。这意味着同样的方法也应该适用于 JavaScript。您是否尝试将 Swift 代码映射到 JavaScript?
  • 是的,我已将以下代码行插入到 javascript 中:console.log(FIRAuth.auth().currentUser.providerData);而且它不起作用。
  • 您需要循环访问providerData 以获取providerId

标签: javascript firebase firebase-authentication


【解决方案1】:

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

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

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

【讨论】:

  • 好吧好吧,我不知道可以同时通过多个提供商登录,现在我这样做了,我想知道,...mo 提供商,mo 问题。
【解决方案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 上进行测试,希望这对你有用。

【讨论】:

  • 这应该是当前接受的答案,它只列出了用户至少登录一次的提供商,而不是用户最近一次登录的提供商。 (而且这些提供商中的第一个不显示最近登录的,我确认)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2020-08-05
    • 2017-09-18
    • 2020-11-18
    • 2018-02-10
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多