好吧,所以我想在我的全局axios配置中添加一个响应拦截器,刷新刷新后,该请求重试一次一次令牌。
这是我当前的全局axios配置:
import axios from "axios";
export default axios.create({
baseURL: process.env.REACT_APP_API,
headers: {
"content-type": "application/json"
},
responseType: "json"
});
现在我已经研究过我的问题已解决here,但是,我不知道如何在答案中附加或使用拦截器功能到我的axios配置文件中(在我编辑它之后)我的需求c)拦截器功能如下:
createAxiosResponseInterceptor() {
const interceptor = axios.interceptors.response.use(
response => response,
error => {
// Reject promise if usual error
if (errorResponse.status !== 401) {
return Promise.reject(error);
}
/*
* When response code is 401, try to refresh the token.
* Eject the interceptor so it doesn't loop in case
* token refresh causes the 401 response
*/
axios.interceptors.response.eject(interceptor);
return axios.post('/api/refresh_token', {
'refresh_token': this._getToken('refresh_token')
}).then(response => {
saveToken();
error.response.config.headers['Authorization'] = 'Bearer ' + response.data.access_token;
return axios(error.response.config);
}).catch(error => {
destroyToken();
this.router.push('/login');
return Promise.reject(error);
}).finally(createAxiosResponseInterceptor);
}
);
}
非常感谢!
答案 0 :(得分:0)
如果我正确理解了问题,则需要在自定义公理实例上调用拦截器创建器函数。像这样:
Player
并使public class Moneycount : MonoBehaviour
{
public Text scoreText;
private Player money;
public Moneycount()
{
money = new Player();
}
void Update()
{
scoreText.text = money.ToString();
}
}
函数将axios实例作为参数。
答案 1 :(得分:0)
我认为您需要使用axios的自定义实例来调用拦截创建器。 您可以按照
const instance = axios.create({
baseURL: process.env.REACT_APP_API,
headers: {
"content-type": "application/json"
},
responseType: "json"
});
并将此实例传递给createAxiosResponseInterceptor作为
createAxiosResponseInterceptor(instance);
您必须更改createAxiosResponseInterceptor才能以的形式接收此实例
function createAxiosResponseInterceptor(instance) {
const interceptor = instance.interceptors.response.use(
response => response,
error => {
// Reject promise if usual error
if (errorResponse.status !== 401) {
return Promise.reject(error);
}
/*
* When response code is 401, try to refresh the token.
* Eject the interceptor so it doesn't loop in case
* token refresh causes the 401 response
*/
instance.interceptors.response.eject(interceptor);
return instance.post('/api/refresh_token', {
'refresh_token': this._getToken('refresh_token')
}).then(response => {
saveToken();
error.response.config.headers['Authorization'] = 'Bearer ' + response.data.access_token;
return instance(error.response.config);
}).catch(error => {
destroyToken();
this.router.push('/login');
return Promise.reject(error);
}).finally(createAxiosResponseInterceptor);
}
);
}
,当然也导出为
export default instance;
希望有帮助