当前位置: 首页 > 知识库问答 >
问题:

Axios不会在请求上传递标头

贡正诚
2023-03-14

我正在构建一个VueJS应用程序,并使用JSON web令牌作为身份验证系统。当我登录用户时,我使用localStorage存储令牌,并且工作正常。我检查了标题,它在“授权”参数中。

我通过axios.defaults.headers.common['授权']=localStorage.get项目('令牌')

我看到了标题,没关系。但是,当我对API中的受保护路由执行get请求时,返回“unauthorized”。但是,当我在请求中手动传递带有令牌的标头时,效果很好。

有人知道如何在执行某个请求时自动传递头吗?

共有3个答案

丁昌翰
2023-03-14

拦截器,在每个请求中包含身份验证令牌作为授权标头:

axios.interceptors.request.use(
 function(config) {
  const token = localStorage.getItem('token')
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
 },
 function(error) {
  return Promise.reject(error)
 }
)

您可以将其放置在主文件中,例如main。js

斜瑞
2023-03-14

您可以使用axios.create创建一个新的axios实例,其中包含配置对象,包括标头。该配置将用于使用该实例进行的每个后续调用。

像这样的东西对我有用:

var App = Vue.component('app', {
  mounted () {
    this.response = null
    this.axiosInstance = axios.create({
      baseURL: 'http://localhost:5000/',
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
      }
    })
  },
  data () {
    return {
      response: this.response,
    }
  },
  methods: {
    login () {
      this.axiosInstance.post('login', {username: 'test', password: 'test'})
        .then(resp => {
          this.accessToken = resp.data.access_token
          this.axiosInstance.defaults.headers['Authorization'] = 'Bearer ' + this.accessToken
        })
        .catch(err => this.response = err.response.status + ' ' + err.response.statusText)
    },
    protected () {
      this.axiosInstance.get('protected')
        .then(resp => this.response = resp.data)
        .catch(err => this.response = err.response.status + ' ' + err.response.statusText)
    }
  },
  template: '<div><button @click="login">Connect</button><button @click="protected">Protected</button></div>'
})
文志学
2023-03-14

试试这个...

//in get request
const auth = {
        headers: {Authorization:'JWT ' + localStorage.getItem('token')} 
    }

axios.get('http://yourapi.com',auth).then(result => { 
 console.log(result.data)
})

//in post request
const auth = {
        headers: {Authorization:'JWT ' + localStorage.getItem('token')} 
    }
 //note:auth will be 3rd parameter in post request
axios.post('http://yourapi.com',{somekey:'some value'},auth).then(result => { 
 console.log(result.data)
})
 类似资料:
  • 问题内容: 我已经按照npm软件包文档中的建议编写了axios POST请求,例如: 它可以工作,但是现在我修改了后端API以接受标头。 内容类型:“ application / json” 授权:“ JWT fefege …” 现在,此请求在Postman上可以正常工作,但是在编写axios调用时,我遵循 此链接 ,无法完全正常工作。 我经常出错。 这是我的修改请求: 任何帮助是极大的赞赏。 问

  • 我正在尝试使用axios对我的react应用程序进行授权,该请求与postman一起工作,但当我开始react时,它会给我400个错误请求 控制台返回这个

  • 出身背景 我将React Native中内置的应用程序连接到REST API。我通过Axios处理请求,并使用Redux存储查询结果。我有一个api连接的index.js文件,它保存了作为请求处理程序的函数,这些请求需要越来越深的授权级别。我有一个简单的函数返回访问令牌,这是由以下代码触发,当前位于应用程序的“欢迎页面”。 理想情况下,在浏览几个屏幕后,用户将进入主页并触发以下代码: 到目前为止,

  • 我有一个基于LazyDataModel的Primeface DataTable。我成功地在表中加载了数据,但我无法使用setProperty tyActionListener在对话框中显示选定的项目,也无法编辑行。我正在使用请求范围,我注意到这个问题似乎在会话范围内得到解决,但我宁愿使用前者(视图范围甚至不会在表中加载数据)。我已经尝试覆盖getRowData和getRowKey方法,但它们甚至没

  • 我试图用Axios向一个需要API密钥作为头的API发出get请求,但我不确定我做错了什么。控制台中有两个错误。1:xhr。js:178个选项https://api.propublica.org/congress/v1403(禁止)。2:加载失败https://api.propublica.org/congress/v1:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access co

  • 问题内容: 我正在尝试使用jQuery在AJAX GET中传递请求标头。在下面的块中,“数据”自动传递查询字符串中的值。有没有办法在请求标头中传递该数据? 以下内容也不起作用 问题答案: 用途: http://api.jquery.com/jQuery.ajax/ http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader- method