我正在制作一个使用Redux和Axios来控制身份验证标头的登录系统。我正在寻找一种方法,每当使用JWT更新商店时,Axios实例的标头也将更新,以便可用于任何后续API调用。
我已经研究过在reducer内进行此更新,但它似乎笨拙,重复,到目前为止还行不通。这是我的设置下面的一些代码。
const initialState = {
isAuth : false,
isLoading: false,
data : {
jwt: null
}
}
export const reducer = (state = initialState, action) => {
switch (action.type) {
case LOGIN_REQUEST:
token = null;
return {
…state,
isLoading: true,
data: null
}
case LOGIN_FAILURE:
data = null;
return {
initialState
}
case LOGIN_SUCCESS:
return {
token = data.jwt;
isAuth: false,
isLoading: false
data: ...action.payload,
}
case LOGOUT:
token = null;
return {
initialState
}
}
}
const token = (jwt) => {
return jwt;
}
const instance = Axios.create({
baseURL: 'root',
headers: {
Authorization: `bearer ${token}`
});
到目前为止,当我更改令牌时,似乎还没有更新Axios实例,这很有意义。所以我的问题有两个:
当Redux存储更新时,我在哪里以及如何更新Axios实例?