Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在获取firebase上当前用户的AuthProvider_Firebase_Firebase Authentication_Angularfire2 - Fatal编程技术网

正在获取firebase上当前用户的AuthProvider

正在获取firebase上当前用户的AuthProvider,firebase,firebase-authentication,angularfire2,Firebase,Firebase Authentication,Angularfire2,我正在尝试检测登录用户的AuthProvider,以便使用“reauthenticateWithPopup”提供一种简单的重新验证方法 最简单的方法是直接从currentUser获取相应的AuthProvider对象,但是,我认为这是不可能的(如果我错了,请纠正我) 另一个选项是获取firebase.auth.currenUser.providerId并执行switch/case子句来创建firebase.auth.AuthProvider。我个人不太喜欢这个选项,因为我必须在字符串(例如“go

我正在尝试检测登录用户的AuthProvider,以便使用“reauthenticateWithPopup”提供一种简单的重新验证方法

最简单的方法是直接从currentUser获取相应的AuthProvider对象,但是,我认为这是不可能的(如果我错了,请纠正我)

另一个选项是获取firebase.auth.currenUser.providerId并执行switch/case子句来创建firebase.auth.AuthProvider。我个人不太喜欢这个选项,因为我必须在字符串(例如“google.com”)上进行切换/大小写。然而,这是我能想到的最好的解决办法

不幸的是,在我实现它的过程中,我意识到firebase.auth.currenUser.providerId总是会返回“firebase”,即使我是从谷歌登录或使用电子邮件/密码。这是虫子吗?我做错什么了吗

我可以看到,如果我访问currentUser.providerData,就会有一个包含该用户所有可用提供程序的数组。但是,这是一个列表,我不确定是否会选择当前使用的列表,以防该用户有多个列表

附加信息:使用angularfire2 v4这是用于Web应用程序的吗

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});


直接从文档中,在脚本中检查这一点,如果用户登录了执行代码,如果没有重定向到register/login,请尝试以下操作

 import {
      AngularFire,
      AngularFireAuth
    } from 'angularfire2';

    constructor(public af: AngularFire) {
      this.af.auth.subscribe(auth => {
        console.log(auth)
      }); 
    }

最简单的方法是遍历providerData列表。您还可以使用一些JWT解析器解析Firebase ID令牌,并检查Firebase.sign\u in\u provider字段。这将包含用于获取ID令牌的身份验证方法:

{
 "iss": "https://securetoken.google.com/PROJECT_ID",
 "aud": "PROJECT_ID",
 "auth_time": 1495126200,
 "user_id": "1234567890",
 "sub": "1234567890",
 "iat": 1495126200,
 "exp": 1495129800,
 "email": "user@example.com",
 "email_verified": true,
 "firebase": {
   "identities": {
     "google.com": [
       "0987654321"
     ],
     "email": [
       "user@example.com"
     ]
   },
   "sign_in_provider": "google.com"
 }
}

currentUser.providerData中的每个提供程序都有一个providerId:firebase.auth().currentUser.providerData[0]。providerId。您可以使用它来重新验证用户。您还可以为当前用户提供所有重新验证的选项,并让用户决定使用哪个选项。是的,这就是我想做的。但是,我想知道是否有一种直接的方法可以知道这次用于验证的方法。如果用户有多种身份验证方法(例如,该帐户与谷歌、facebook等链接),那么应该有一种方法可以获取当前的身份验证。我明白了,我猜angularfire2中没有内置的功能可以做到这一点?它看起来是一个很好的功能。