设置token后,获取currentuser返回401

来源:8-3 登录第二部分 axios 设置通用 header

Linx

2020-10-15

login (state, rawData) {
      if (rawData.code === 0) {
        const { token } = rawData.data
        state.token = token
        axios.defaults.headers.common.Authorization = `Bearer ${token}`
      }

actions:
fetchCurrentUser ({ commit }) {
      getAndCommit('/user/current', 'fetchCurrentUser', commit)
    }

mutations:
fetchCurrentUser (state, rawData) {
      console.log(rawData)
    }

我从返回中查看请求头部,确实是附带了token,token是可以通过swagger的测试的
图片描述

请老师指点迷津

图片描述

写回答

4回答

张轩

2020-10-16

同学你好 我今天早晨又用了你新的代码 跑了完全没问题啊

当然我稍微改了一下你的代码 我用的用户名 test@111.com 密码 111111

我就是在 login 以后 dispatch 了 fetchCurrentUser,你之前注释掉了

还有你的 action 没有返回

fetchCurrentUser ({ commit }) {
  return getAndCommit('/user/current', 'fetchCurrentUser', commit)
}
store.dispatch('login', payload).then(rawData => {
  if (rawData.data.token) {
    store.dispatch('fetchCurrentUser')
  router.push('/')
  }
})

截图如下:

//img.mukewang.com/szimg/5f88fb0e0950a89f11660688.jpg

0
1
Linx
谢谢老师,我证实是环境问题。 我重新开了台虚拟机,然后重新配置环境,就跑通了。我换一台机开发吧? 非常感觉老师的耐心
2020-10-16
共1条回复

张轩

2020-10-15

1你把本地的 token 清除一下,然后重新登录就可以了,我估计你之前的 token 已经过期或者失效了,我清除了一下本地的 localStorage,重新登录就没问题了

在后面的内容会有针对token 过期的处理

2 你的另外一个问题,因为我们是跨域请求,都要有一个 options 请求,这个请求称之为 preflight,看这个文档 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS 然后搜索 preflight

0
2
Linx
老师,我已经设置了app挂载时判断并log(token),同时在用户下拉面板里增加了一个fetchCurUser,也设置了logout可以清空token。。结果还是401。。老师有空的话请直接跑我的代码尝试登陆,我的icode还有10天有效。 新的代码我已经push了
2020-10-15
共2条回复

qq_慕前端0178666

2020-10-15

啊啊啊

0
1
Linx
???
2020-10-15
共1条回复

张轩

2020-10-15

同学你好 我在本地试了慕课网的接口 使用的应该是和你一样的测试用户 看的请求应该是没问题 我需要本地调试一下 可以把源代码发我一下 gitee 或者 github,或者你可以直接在 postman 里面导出请求,我在本地试一下你的请求

0
2
Linx
老师,我加了一张图,显示响应的信息
2020-10-15
共2条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3074 学习 · 2253 问题

查看课程