Vue Axios 本地存储的令牌未定义

Posted

技术标签:

【中文标题】Vue Axios 本地存储的令牌未定义【英文标题】:Vue Axios local stored token is undefined 【发布时间】:2019-08-15 13:36:32 【问题描述】:

在 Vue 中,我正在构建一个小的 Userprofile 页面。它建立在使用 Axios 进行令牌认证的基础上。挂载此页面时,令牌未定义。

登录后,一个令牌被放置在 localStorage 中。

Axios Get 请求是在 Vue 组件之外构建的

Api.js

import axios from 'axios'

export default () => 
  return axios.create(
    baseURL: `http://localhost:8081/`
  )

获取请求

import Api from '@/services/Api'

let config = 
  headers: 
    'Content-Type': 'application/json',
    'Authorization': localStorage.getItem('token')
  


export default 
  index () 
    return Api().get('user/profile', config)
  

Vue

<script>
export default 
  data: () => (
    user: 
  ),
  mounted () 
    this.user = UserProfileService.index
    console.log(UserProfileService.config)
  

</script>
有很多建议,我都试过了。抽动,逗号等。谁看到大局?

【问题讨论】:

【参考方案1】:

使用请求拦截器设置授权标头:

// Api.js
export default () => 
  const instance = axios.create(
    baseURL: `http://localhost:8081/`
  )

  instance.interceptors.request.use(function (config) 
    const token = localStorage.getItem('token')

    if (token) 
      config.headers.Authorization = `Bearer $token`
    

    return config
  , function (error) 
    // Do something with request error
    return Promise.reject(error)
  )

  return instance

【讨论】:

仍然未定义且不可用【参考方案2】:

我添加了数字漂移器的代码,并通过更改 Vue 中的挂载函数解决了问题(在帮助下)。

mounted () 
    console.log('mounted')
    UserProfileService.index()
      .then((res) => 
        this.user = res.data
      )
  

【讨论】:

以上是关于Vue Axios 本地存储的令牌未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vue 中存储、管理 REST API JWT 身份验证令牌?

使用Vue+axios+Vuex实现登录后前端数据本地化存储实战

为啥axios数据存储在变量中时未定义?

axios请求失败?

调用更新本地存储返回未定义

vue 购物车 未成品-本地存储 根据日期列出对应菜品