React-Native Firebase:令牌刷新不起作用

kon*_*nse 3 android firebase react-native react-native-firebase

我的 react-native-firebase(或 firebase)有一个问题,我的应用程序在 auth 令牌刷新后没有收到触发器。这与 [1] 的问题几乎相同,但他们从未发布过解决方案。

因此,在 Android 手机和 Android 模拟器(不知道 iOS)上,注册、登录和注销都可以完美运行,这意味着听众可以正确地看到我何时执行logout()等操作。但听众永远不会触发当令牌刷新时。

我的第一个问题是:我是否正确地假设onIdTokenChanged-listener 应该在 60 分钟后自动触发而无需执行任何其他操作,例如调用任何 firebase 函数,这样应用程序就坐在那里 60 分钟什么都不做,然后接收事件并更换令牌?

我包含侦听器的主要组件如下所示:

class ReduxAppWrapper extends Component {

  componentDidMount() {
    firebase.auth().onAuthStateChanged((user) => {
        console.log('COMP DID MOUNT: AUTH STATE CHANGED! ' + JSON.stringify(user));
    });
    firebase.auth().onIdTokenChanged((user) => {
        console.log('COMP DID MOUNT: TOKEN CHANGED! ' + JSON.stringify(user));
    });
    firebase.auth().onUserChanged((user) => {
        console.log('COMP DID MOUNT: USER CHANGED! ' + JSON.stringify(user));
    });
  };

  render() {
    return (
      <ReduxProvider store={store}>
        <MenuProvider>
          <PaperProvider>
            <AppContainer />
          </PaperProvider>
        </MenuProvider>
      </ReduxProvider>);
  }
}
Run Code Online (Sandbox Code Playgroud)

通常在侦听器内部,我有一个函数可以调度 redux-action,以便在我的组件中广播身份验证信息。在这些组件中,我使用 jwt 令牌向后端发送 http 请求。

现在后端当然使用 firebase 来验证该令牌(这是 60 分钟后出现问题的地方,因为它检索过时的 jwt),但我认为我认为问题出在应用程序中是正确的,因为刷新确实如此不会发生。

如果有人能指出我在哪里看,我会很高兴,我还尝试在 firebase 控制台中找出是否发送了令牌刷新事件,但我找不到任何相关信息。

所以基本上:

1)我假设firebase.auth().onIdTokenChanged()应该在没有我做任何其他事情的情况下调用该函数是否正确?或者在主组件中定义一次侦听器是不够的(还考虑到由于堆栈导航,其他屏幕将在其顶部呈现)。

2)如果代码没问题,你有什么可以看的提示吗?

非常感谢!

[1] https://github.com/invertase/react-native-firebase/issues/531

kon*_*nse 5

对于遇到相同问题的任何人,我最终都会在每次需要时向 firebase 询问令牌。我仍然认为这应该没有必要,但我不想再花时间分析为什么刷新不能自动工作。所以我在应用程序中所做的是

firebase.auth().currentUser.getIdToken().then((token) => {
  fetch(url, {
    method: 'GET',
    headers: { Authorization: token }
  })
}
Run Code Online (Sandbox Code Playgroud)

¯\_(?)_/¯