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

Javascript React native-Firebase onAuthStateChanged无法正常工作,javascript,reactjs,firebase,react-native,firebase-authentication,Javascript,Reactjs,Firebase,React Native,Firebase Authentication,我无法在我的react本机应用程序中持久化firebase会话。这个问题和我的几乎一样 但这里提供的答案对我并不适用 目前我已按如下所示登录: export const loginUser = ({ email, password }) => { return (dispatch) => { dispatch({ type: LOGIN_USER }); firebase.auth().signInWithEmailAndPassword(email, pass

我无法在我的react本机应用程序中持久化firebase会话。这个问题和我的几乎一样 但这里提供的答案对我并不适用

目前我已按如下所示登录:

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

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

  };
};
我的会话已创建,我可以访问存储在firebase上的用户对象

当我使用Cmd+R或关闭应用程序并重新打开它时,我的会话将消失。我在app.js文件的componentWillMount()部分运行了以下操作:

firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    console.log('user is logged');
  } else {
    console.log('not logged in')
  }
});
每当我刷新应用程序或完全关闭并重新打开应用程序时,都会收到“未登录”响应

我还试着询问:

firebase.auth().currentUser
但是在返回null时得到相同的问题

我做错了什么


是否有一种特殊的方法可以保持我缺少的会话处于活动状态?

此问题是因为您没有执行Firebase.auth().signOut()操作。尝试注销(对于测试,您可以始终在componentWillMount函数中注销),您将能够看到onAuthStateChanged通知。

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

事实证明,我最初的设置(某种程度上)起了作用。我的意思是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 })

  }
});

此外,我还通过强制启动屏幕保持在查询身份验证时的状态来改善用户体验。完成后,启动屏幕被隐藏,应用程序被加载为已登录的应用程序或用户尚未登录的应用程序。

凭据临时密钥存储在浏览器中(会话或cookie或两者)。您可能已修改浏览器以在页面关闭时清除会话?不确定。我甚至可以使用相同的浏览器打开一个新选项卡,并且已经登录。希望有帮助。将浏览器会话/cookie设置恢复为默认设置?@ronroyston这是针对react本机移动应用程序的。我️ 我正在为android和iOS设备创建本机应用程序。我️ 不要认为应用程序会删除会话cookie。我️ 如果您使用的是最新版本的firebase.js,可能会出错?4.5.2中修复了一个与react native persistence相关的问题。这看起来很像我的react native课程,这与我遇到的问题相同。用户在重新加载应用程序后不会重置,因此它始终显示“注销”按钮,而不会显示登录表单。我这里有一个要点