在我的应用程序中,当用户登录时,我使用 firebase.auth 根据用户输入的电子邮件/密码对用户进行身份验证:
firebase.auth().signInWithEmailAndPassword(userInputs.email.value, userInputs.password.value)
然后我将其分派(dispatch)到 redux 状态,并将接收到的 localId 和 idToken 设置在本地存储上:
localStorage.setItem('token', response.user.qa);
localStorage.setItem('localId', response.user.uid);
当用户关闭应用程序窗口并稍后重新打开应用程序时,localId 和 idToken 仍设置在本地存储中,但要重新进行身份验证,我需要提供电子邮件和密码。是否可以使用 localId/idToken 进行身份验证,或者我应该将电子邮件/密码保存在 localStorage 上而不是保存两个 token 吗?
检查用户是否通过身份验证后:
var user = firebase.auth().currentUser;
console.log(user);
我得到“空”。 看来即使我已经有 localId 也必须登录,不登录我就无法访问数据库。
此外,显然我的数据库规则仅向经过身份验证的用户授予对数据库的访问权限:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
提前致谢!
最佳答案
您不必将电子邮件和密码存储在本地存储中。 Firebase 库自动在本地保留身份验证信息。
您得到null
的原因是您正在尝试使用同步代码获取用户信息。
这意味着您正在尝试在 firebase 库初始化之前获取用户。
firebase.auth().currentUser; // <= synchronous
以下代码异步运行,您可以在 Firebase 库初始化后获取用户。
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
关于reactjs - 使用 localId/idToken(而不是电子邮件/密码)进行 Firebase 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53244547/