【发布时间】:2020-11-03 08:32:00
【问题描述】:
我正在构建一个 React Native 应用程序,并使用 Firebase,更具体地说是 Firestore,来管理我的数据。我目前的目标是在我的应用程序上实现自动登录功能,如果用户退出应用程序,我希望他们保持登录状态,除非他们在退出应用程序之前手动点击Sign Out 按钮。这是我目前执行此操作的过程:
当用户登录应用时,我通过以下方式登录:
firebase.auth().signInWithEmailAndPassword(email, password)。
然后我通过以下方式获取他们的 idToken:
let authIdToken = "";
firebase
.auth()
.currentUser.getIdToken(true)
.then(function (idToken) {
authIdToken = idToken
})
.catch(function (error) {
console.log(error)
});
然后我想将此令牌保存到手机中,因此当用户再次打开应用程序时,我可以获取此令牌并检查其有效性。如果它有效,那么我可以使用他们的 idToken 登录用户。在 react native 中,我可以这样做:
AsyncStorage.setItem(
"userData",
JSON.stringify({
token: token,
})
);
现在当应用加载时:
const startScreen = props => {
useEffect(() => {
const tryLogin = async () => {
const userData = await AsyncStorage.getItem("userData");
const transformedData = JSON.parse(userData);
const { token } = transformedData;
await firebase
.auth()
.verifyIdToken(token, true)
.then((payload) => {
console.log(true)
})
.catch((error) => {
if (error.code == "auth/id-token-revoked") {
// Token has been revoked. Inform the user to reauthenticate or signOut() the user.
console.log("revoked")
} else {
console.log("error")
}
});
};
tryLogin();
}, []);
问题:当我尝试以这种方式验证令牌时,遇到以下错误:firebase.auth().verifyIdToken is not a function.
我通读了文档,不确定如何使用 JS 验证此令牌。我该如何验证?让我知道我的验证过程是否不正确以及应该如何完成。我不熟悉使用 Firestore 和进行一般身份验证,并希望学习如何以正确的方式进行。
另一个有用的说明:这是我配置 Firestore 的方式:!firebase.apps.length ? firebase.initializeApp(firebaseConfig) : {};
谢谢!
【问题讨论】:
标签: javascript reactjs firebase google-cloud-firestore firebase-authentication