在firebase

时间:2017-05-15 19:47:50

标签: firebase firebase-authentication angularfire2

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

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

另一种选择是获取firebase.auth.currenUser.providerId并执行switch / case子句来创建firebase.auth.AuthProvider。我个人不喜欢这个选项,因为我必须对字符串进行切换/案例(例如“google.com”)。但是,这是我能想到的最好的解决方案。

不幸的是,当我实现它时,我意识到firebase.auth.currenUser.providerId将始终返回“firebase”,即使我将从谷歌登录或使用电子邮件/密码登录。这是一个错误吗?我做错了吗?

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

其他信息:使用angularfire2 v4

3 个答案:

答案 0 :(得分:0)

这适用于webapp?

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

https://firebase.google.com/docs/auth/web/manage-users

直接从文档中检查,如果用户登录执行代码,如果没有重定向到注册/登录,则在脚本中检查

答案 1 :(得分:0)

要让当前用户登录,请尝试此

{{1}}

答案 2 :(得分:0)

最简单的方法是遍历providerData列表。您还可以使用某些JWT解析器解析Firebase ID令牌,并检查firebase.sign_in_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"
 }
}