错误原因:
- 因为在浏览器中拿后端设置在响应头中的token时:
const { authorization } = response.headers;
- 但是在真机上的时候要是想拿到token需要:
const authorization = response.headers.Authorization
解决方案:响应拦截器需要设置为
// 添加响应拦截器
instance.interceptors.response.use( function ( response ) {
// 2xx 范围内的状态码都会触发该函数。
// 只要登录成功之后,就将authorization存储到本地缓存中
/*#ifdef H5*/
const { authorization } = response.headers;
/*#endif*/
/*#ifdef APP-PLUS*/
const authorization = response.headers.Authorization
/*#endif*/
authorization && uni.setStorageSync( 'token', authorization );
return response;
}, function ( error ) {
// console.log( error );
// 超出 2xx 范围的状态码都会触发该函数。
// 对响应错误做点什么
const status = error.response?.status;
// 如果status为401说明token过期,那么就重定向到登录页面,并将token从本地缓存中删除
if ( status === 401 ) {
uni.removeStorageSync( "token" )
uni.removeStorageSync( "store" )
uni.navigateTo( {
url: '/pages/login/login'
} )
}
return Promise.reject( error );
} );