axios拦截器判断toke是否过期怎么做function (request) { const token = window.localStorage.getItem("poying_access_token"); request.headers.Authorization = request?.headers?.Authorization ?? (Bearer ${token} || ""); if (!whiteList.some((d) => d === request.url) && !token) { window.location.href = "/login"; } return request; }, function (error) { return Promise.reject(error); } );
时间: 2023-12-10 10:38:03 浏览: 35
这段代码中,使用了axios的请求拦截器,在请求发出前进行token的判断。具体的做法是从本地存储中获取token,然后将token添加到请求头的Authorization字段中。如果请求的url不在白名单中并且没有token,则跳转到登录页面。最后,将请求对象返回,使请求继续发送出去。
如果token过期了,可以通过后端返回的状态码或错误信息来判断,然后在响应拦截器中进行处理。例如,如果后端返回401状态码或者错误信息中包含token过期的字样,那么可以在响应拦截器中进行token刷新或者跳转到登录页面。具体的做法可以参考下面的代码:
```
axios.interceptors.response.use(
function (response) {
return response;
},
function (error) {
if (error.response.status === 401 || error.response.data.includes('token expired')) {
// 进行token刷新或跳转到登录页面
// ...
}
return Promise.reject(error);
}
);
```
相关问题
axios拦截器判断toke是否过期
可以使用axios的拦截器来判断token是否过期,具体实现如下:
```javascript
import axios from 'axios'
const instance = axios.create({
baseURL: 'http://api.example.com',
timeout: 5000
})
// 请求拦截器
instance.interceptors.request.use(
config => {
const token = localStorage.getItem('token')
if (token) {
// 如果token存在,则在请求头中添加token
config.headers.Authorization = `Bearer ${token}`
}
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器
instance.interceptors.response.use(
response => {
return response
},
error => {
const { response } = error
if (response) {
switch (response.status) {
case 401:
// 如果返回401错误,表示token过期或无效,跳转到登录页
localStorage.removeItem('token')
window.location.href = '/login'
break
// 其他错误处理
default:
// do something
break
}
}
return Promise.reject(error)
}
)
export default instance
```
在请求拦截器中,我们通过localStorage获取token,并在请求头中添加token,这样每次请求都会自动携带token。在响应拦截器中,如果返回401错误,即表示token过期或无效,我们清除localStorage中的token,并跳转到登录页。其他错误可以根据实际情况进行处理。
const service = axios.create({ baseURL: import.meta.env.VITE_GLOB_API_URL, })中importmeta不存在属性env
这个问题是因为在这段代码中,`import.meta.env`并不是JavaScript的内置语法,而是一种特定的用法,它通常用于获得当前境的一些配置信息。在这种况下,`import.meta.env.VITE_GLOB_URL`应该是一个环境变量,用于指定Axios请求的基本URL。
要解决这个问题,你可以检查一下你的项目配置文件(如`.env`或`.env.local`),确保在配置文件中定义了`VITE_GLOB_API_URL`这个环境变量。另外,你还需要在项目中使用Vite或其他对应的构建工具来处理这个特殊的导入语法。