【发布时间】:2021-05-20 16:43:52
【问题描述】:
我正在使用带有firebase的react native,如果不存在则firebase创建帐户的电话身份验证(默认行为),那么如何创建检查点,如果用户不存在,那么它应该先注册然后登录?
【问题讨论】:
标签: firebase react-native
我正在使用带有firebase的react native,如果不存在则firebase创建帐户的电话身份验证(默认行为),那么如何创建检查点,如果用户不存在,那么它应该先注册然后登录?
【问题讨论】:
标签: firebase react-native
与其检查用户之前是否注册过,最好的方法是直接sign in the user normally,然后处理用户数据文档不存在的情况。
这避免了必须开发一种方法来检查电话号码之前是否已注册,并有助于避免在实施不当时泄露存储的电话号码。
const [user, setUser] = useState(
() => firebase.auth().currentUser || undefined
);
const initializingUser = user === undefined;
useEffect(() => firebase.auth().onAuthStateChanged(setUser), []);
const [userData, setUserData] = useState();
const initializingUserData = userData === undefined;
useEffect(() => {
if (initializingUser)
return; // do nothing yet
if (!user) {
setUserData(null);
return;
}
// clear out any stale data
setUserData(undefined);
return firebase.firestore()
.collection("users")
.doc(user.uid)
.onSnapshot({
next(snapshot) {
setUserData(!snapshot.exists ? null : snapshot.data());
},
error(err) {
// TODO: handle errors
}
});
}, [user && user.uid]); // only rerun when the user ID changes (between undefined, null and different IDs)
useEffect(() => {
if (initializingUser || initializingUserData)
return; // do nothing yet
if (!user) {
// not logged in, go to login if not already here
navigator.navigate("Login");
return;
}
if (userData) {
// has user data, take to dashboard
navigator.navigate("Dashboard");
return;
}
// no user data, take to profile setup
navigator.navigate("CompleteProfile");
}, [user, userData]);
【讨论】: