Javascript Firebase ID令牌一小时后过期
因此,我在我的react native应用程序中使用了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
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何时刷新令牌以立即获取新令牌,则应改为使用设置回调,该回调将在用户的令牌每次更改时调用。同样,您应该为应用程序全局设置其中一个,并在请求时使用其当前值。非常感谢您的详细回答!它完全有效,帮助我更好地理解这个问题:)