gpt4 book ai didi

javascript - React-native - Firebase onAuthStateChanged 无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:09 24 4
gpt4 key购买 nike

我无法在我的 react-native 应用程序中保留 firebase session 。这个问题几乎与 React Native - Firebase auth persistence not working但那里提供的答案对我没有用。

目前我登录如下图:

export const loginUser = ({ email, password }) => {
return (dispatch) => {
dispatch({ type: LOGIN_USER });

firebase.auth().signInWithEmailAndPassword(email, password)
.then(user => loginUserSuccess(dispatch, user))
.catch(() => loginUserFailed(dispatch))

};
};

我的 session 已创建,我可以访问存储在 firebase 上的用户对象。

当我按下 Cmd+R 或者当我关闭应用程序并重新打开它时,我的 session 就消失了。我在 app.js 文件的 componentWillMount() 部分运行了以下命令:

firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log('user is logged');
} else {
console.log('not logged in')
}
});

每当我刷新应用程序或将其完全关闭并重新打开时,我都会收到“未登录”的响应。

我也试过查询:

firebase.auth().currentUser

但在返回 null 时遇到同样的问题

我做错了什么?

是否有一种特定的方法可以使我缺少的 session 保持事件状态?

最佳答案

我发布这个问题已经有一段时间了,但我想我会发布我的解决方案。

事实证明,我的初始设置(有点)奏效了。我的意思是,onAuthStateChanged 需要一些时间才能收到来自 firebase 的回复,在此期间,应用程序的其余部分加载时认为用户未登录,因为这是默认状态。

我设法通过将 onAuthStateChanged 逻辑移出 app.js 并移至 componentWillMount 中的初始主页来解决此问题。现在看起来像这样:

componentWillMount() {
const { navigate } = this.props.navigation;
firebase.auth().onAuthStateChanged((user) => {
if (user) {

SplashScreen.hide()
this.setState({ loading: false })

this.props.persistedUserLoginSuccess({user, navigate})

this.props.fetchUserData();

} else {

SplashScreen.hide()
this.setState({ loading: false })

}
});

另外,我设法通过强制启动画面停留在正在查询身份验证的位置来改善用户体验。完成后,初始屏幕被隐藏,应用程序加载为登录应用程序或用户尚未登录的应用程序。

关于javascript - React-native - Firebase onAuthStateChanged 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47149316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com