javascript - Firebase ID 令牌在一小时内到期
问题描述
所以我redux-saga
在我的 react-native 应用程序中使用并尝试使用刷新令牌但没有用,所以我的方法是在 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 令牌已过期。从您的客户端应用程序获取新令牌并重试(auth/id-token-expired)。有关如何检索 ID 令牌的详细信息,请参阅https://firebase.google.com/docs/auth/admin/verify-id-tokens 。
所以我想知道是否有另一种方法可以尝试从我这边解决问题?
提前致谢。
解决方案
Firebase 身份验证令牌每小时自动刷新一次。这是 SDK 的一项功能,您无需执行任何操作即可启用它。
您绝对不想firebase.auth().onAuthStateChanged
为每个请求打电话。这会启动一个持久监听器,并在每次使用时添加一个新回调。通常,您只为您的应用程序全局添加一个侦听器,并在发生更新时使用其更新。
如果您需要知道 SDK 何时刷新令牌以便立即获取新令牌,则应改为使用onIdTokenChanged设置回调,该回调将在每次用户令牌更改时调用。同样,您应该只为您的应用程序全局设置其中之一,并在请求时使用其当前值。
推荐阅读
- scala - Data proc 作业因找不到类异常而失败
- javascript - ie11-object 不支持属性或绑定问题
- c++ - 如何在 C++ 中使用循环初始化集合?
- python - 只能将 str (不是“float”)连接到 str
- protractor - SessionNotCreatedException:消息:未创建会话:此版本的 ChromeDriver 仅支持 Chrome 版本 85
- javascript - 这是策略模式吗
- laravel - 工匠制作:迁移忽略子文件夹?
- php - 如何在php中增加整数
- java - 如何解析 Z3/Java 中的量词表达式?
- macos - 如何从视图调用 NSViewRepresentable 上的方法?