我在React Native App中使用firebase auth(通过expo),通过观察者(包括永久用户)可以正常进行身份验证:
import firebase from "firebase";
firebase.auth().onAuthStateChanged(user => {
if (user) {
this.props.setUser(user);
}
}).bind(this);
我显示一个具有登录/注册功能的登录屏幕,如果用户使用帐户登录,我将转发至主应用程序。应用启动后,加载持久性用户时, onAuthStateChanged 方法需要花一点时间,这导致我的应用短暂显示此着陆屏幕,然后离开。 我希望有一个加载屏幕,直到正确确定身份验证状态为止。
但是,如果没有永久用户,则onAuthStateChanged永远不会触发,因此我没有要等待的特定事件。我可以使用超时计时器,但这似乎是一个糟糕的解决方案,因为必要的等待时间可能会因硬件和连接速度而有很大差异。
如何正确解决此问题,即如何知道没有永久用户?
答案 0 :(得分:0)
Firebase error block when user does not persist
src/app/shared/...
答案 1 :(得分:0)
onAuthStateChanged 只有在加载完成后才会触发它的功能。因此,当触发时,无论 user 的值如何,您都可以假设身份验证已完成加载。我最终使用 expo-splash-screen 在身份验证加载时显示加载屏幕。
示例:
export default () => {
const [isAuthenticationLoaded, setIsAuthenticationLoaded] = React.useState(false);
firebase.auth().onAuthStateChanged((user) => {
if (user) setUser(user);
setIsAuthenticationLoaded(true);
});
React.useEffect(() => {
SplashScreen.preventAutoHideAsync();
}, []);
React.useEffect(() => {
if (isAuthenticationLoaded) {
SplashScreen.hideAsync();
}
}, [isAuthenticationLoaded]);
...
}