在 firebase 上为当前用户获取 AuthProvider
Obtaining AuthProvider for current user on firebase
我正在尝试检测登录用户的 AuthProvider,以便提供一种使用 "reauthenticateWithPopup" 重新验证的简单方法。
最简单的方法是直接从currentUser获取对应的AuthProvider对象,不过我觉得不行(如有错误请指正)
另一种选择是获取 firebase.auth.currenUser.providerId 并执行 switch/case 子句以创建 firebase.auth.AuthProvider。我个人不太喜欢这个选项,因为我必须对字符串执行 switch/case(例如 "google.com")。然而,这是我能想到的最好的解决方案。
不幸的是,当我实施它时,我意识到 firebase.auth.currenUser.providerId 总是 return "firebase",即使我从 google 登录或使用 email/password。这是一个错误吗?我做错了什么吗?
我可以看到,如果我访问 currentUser.providerData,就会有一个包含该用户所有可用提供商的数组。但是,这是一个列表,我不确定我是否会选择当前使用的列表,以防该用户有多个列表。
附加信息:使用 angularfire2 v4
这是一个网络应用程序?
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
直接从文档中检查你的脚本,如果用户登录执行代码,如果没有重定向到 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_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"
}
}
我正在尝试检测登录用户的 AuthProvider,以便提供一种使用 "reauthenticateWithPopup" 重新验证的简单方法。
最简单的方法是直接从currentUser获取对应的AuthProvider对象,不过我觉得不行(如有错误请指正)
另一种选择是获取 firebase.auth.currenUser.providerId 并执行 switch/case 子句以创建 firebase.auth.AuthProvider。我个人不太喜欢这个选项,因为我必须对字符串执行 switch/case(例如 "google.com")。然而,这是我能想到的最好的解决方案。
不幸的是,当我实施它时,我意识到 firebase.auth.currenUser.providerId 总是 return "firebase",即使我从 google 登录或使用 email/password。这是一个错误吗?我做错了什么吗?
我可以看到,如果我访问 currentUser.providerData,就会有一个包含该用户所有可用提供商的数组。但是,这是一个列表,我不确定我是否会选择当前使用的列表,以防该用户有多个列表。
附加信息:使用 angularfire2 v4
这是一个网络应用程序?
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
直接从文档中检查你的脚本,如果用户登录执行代码,如果没有重定向到 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_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"
}
}