Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase ID令牌一小时后过期_Javascript_React Native_Firebase Authentication_Redux Saga_Auth Token - Fatal编程技术网

Javascript Firebase ID令牌一小时后过期

Javascript Firebase ID令牌一小时后过期,javascript,react-native,firebase-authentication,redux-saga,auth-token,Javascript,React Native,Firebase Authentication,Redux Saga,Auth Token,因此,我在我的react native应用程序中使用了redux saga,并尝试使用刷新令牌,但没有成功,因此我的方法是在app.js中使用以下方法,以便专门为每个请求获取令牌并强制刷新它: handleResponse = async () => { const {dispatch} = this.store; await axios.interceptors.request.use(config => { // Important: reques

因此,我在我的react native应用程序中使用了
redux saga
,并尝试使用刷新令牌,但没有成功,因此我的方法是在app.js中使用以下方法,以便专门为每个请求获取令牌并强制刷新它:

  handleResponse = async () => {
    const {dispatch} = this.store;
    await axios.interceptors.request.use(config => {
      // Important: request interceptors **must** return the request.
      console.log("refreshToken")
      let user =  firebase.auth().currentUser;
        firebase.auth().onAuthStateChanged(function(user) {   if (user) {
          console.log("auth changed: ",user)
          user.getIdToken(true).then((token) => {
                setAccessToken(token);
                config.headers.authorization = token;
              }
          );
        } else { console.log("didn't auth change") } });
      console.log("req in handle response: ",JSON.stringify(config));
      return config;
    });
    axios.interceptors.response.use(config => config, (err) => {
      if (err.response) {
        const response = err.response;
        const state = this.store.getState();
        if (
            response.status === 401
            && state.auth.isAuthenticated
        ) {
          dispatch(logout());
        }
      }
      return Promise.reject(err);
    });
  };
但它总是在一个小时后结束,让我犯下以下错误:

Firebase ID令牌已过期。从客户端应用获取一个新令牌,然后重试(身份验证/id令牌已过期)。有关如何检索ID令牌的详细信息,请参阅

所以我想知道是否有另一种方法可以从我这边解决这个问题


提前感谢。

Firebase身份验证令牌每小时自动刷新一次。这是SDK的一个功能,您不必做任何事情来启用它

您肯定不想为每个请求调用
firebase.auth().onAuthStateChanged
。这将启动一个持久侦听器,并在每次使用时添加一个新回调。通常,您只为应用程序全局添加一个侦听器,并在更新时使用其更新


如果您需要知道SDK何时刷新令牌以立即获取新令牌,则应改为使用设置回调,该回调将在用户的令牌每次更改时调用。同样,您应该为应用程序全局设置其中一个,并在请求时使用其当前值。

非常感谢您的详细回答!它完全有效,帮助我更好地理解这个问题:)