先来走一遍流程
这是我登录成功后,将token保存到localStorage中.
保持token之后跳转到控制台页面,控制台的布局组件 BasicLayout.js 会在componentDidMount方法中发送一条获取当前用户信息的请求
看下图我们可以知道控制台这边是正常输出的,但是访问的接口报401错误
去浏览器查看参数后发现原因是token为空,
我们再来看一下request.js请求类
原因可以很直观的看出来,是request使用localStorage.getItem("token")时没有获取到数据,但是我在BasicLayout中却是可以获取到了. 很疑问.
再者,我刷新浏览器地址后,request竟可以获取到token了.
难道说我登录后跳转时不能使用 yield put('/')); ,而是得用window.location.href跳转???
今天测试也发现这个问题 在网上找了一下没找到答案(没仔细找 看了下百度。。。)看到你的问题 然后 有空的时候 我就去看了下源码 umi-reques 的包
var extend = function extend(initOptions) {
return request(initOptions);
};
......
var request = function request() {
var initOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var coreInstance = new Core(initOptions);
var umiInstance = function umiInstance(url) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var mergeOptions = objectSpread({}, initOptions, options, {
headers: objectSpread({}, initOptions.headers, options.headers),
params: objectSpread({}, getParamObject(initOptions.params), getParamObject(options.params)),
method: (options.method || initOptions.method || 'get').toLowerCase()
});
return coreInstance.request(url, mergeOptions);
};
答案很明显了 设置 options.headers 或重新 extend 是 request 初始化
时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。