为什么即使删除令牌后,axios 拦截器中仍存在授权令牌?
Why authorization token exists in axios interceptors even after deleting the token?
我正在构建一个项目,我将我的身份验证令牌存储在本地存储中。
这是我的 index.js 代码:
axios.defaults.headers.common['Authorization']= localStorage.getItem('token');
axios.interceptors.request.use(request=>{
console.log(request);
return request;
}, error=>{
console.log(error);
return Promise.reject(error);
});
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
登录后,login button
更改为 logout button
,单击注销按钮后,localstorage 令牌被删除
代码如下:
<Button onClick={()=>{localStorage.removeItem('token')}}>Log Out</Button>
当我在 devtools 的应用程序选项卡中检查时单击注销按钮后,我可以看到令牌已被删除但是当我在注销后发出一些其他请求时,我可以看到令牌仍然存在于请求中受到 axios 拦截器的安慰。
当我重新加载页面时,令牌从 axios 拦截器中消失,但在注销后不会自动消失。
请指导我的逻辑有什么问题,如果需要更多信息,请告诉我。
令牌保留在拦截器中,因为在 onClick 事件中,您只是从存储中移除令牌,而不是从拦截器本身移除令牌。
要删除它,您必须更改或删除 header 的值:
<Button onClick={()=>{
localStorage.removeItem('token')
axios.defaults.headers.common['Authorization'] = ''
// Other options are:
// axios.defaults.headers.common['Authorization'] = null
// Or:
// delete axios.defaults.headers.common['Authorization']
}}>Log Out</Button>
我正在构建一个项目,我将我的身份验证令牌存储在本地存储中。
这是我的 index.js 代码:
axios.defaults.headers.common['Authorization']= localStorage.getItem('token');
axios.interceptors.request.use(request=>{
console.log(request);
return request;
}, error=>{
console.log(error);
return Promise.reject(error);
});
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
登录后,login button
更改为 logout button
,单击注销按钮后,localstorage 令牌被删除
代码如下:
<Button onClick={()=>{localStorage.removeItem('token')}}>Log Out</Button>
当我在 devtools 的应用程序选项卡中检查时单击注销按钮后,我可以看到令牌已被删除但是当我在注销后发出一些其他请求时,我可以看到令牌仍然存在于请求中受到 axios 拦截器的安慰。
当我重新加载页面时,令牌从 axios 拦截器中消失,但在注销后不会自动消失。
请指导我的逻辑有什么问题,如果需要更多信息,请告诉我。
令牌保留在拦截器中,因为在 onClick 事件中,您只是从存储中移除令牌,而不是从拦截器本身移除令牌。
要删除它,您必须更改或删除 header 的值:
<Button onClick={()=>{
localStorage.removeItem('token')
axios.defaults.headers.common['Authorization'] = ''
// Other options are:
// axios.defaults.headers.common['Authorization'] = null
// Or:
// delete axios.defaults.headers.common['Authorization']
}}>Log Out</Button>