javascript - 授权 header 不适用于 http GET 请求

标签 javascript vue.js vue-resource

我在我的项目中使用 VueSession。我创建了一个登录组件,并将数据传递到后端(Django,返回 JWT token )。这是我的问题。我的登录工作正常,它返回 JWT,但是当我想从其他端点获取数据时,我收到错误 401 ( Authentication credentials were not provided )。当我在终端中使用curl 时,一切正常。

curl -X POST -d "username=test&password=test" http://localhost:8000/api/token/auth/ 它返回 token

curl -H "Authorization: JWT <my_token>" http://localhost:8000/protected-url/ 它从网站返回数据

这是我在 Vue 项目中设置的内容。

Login.vue

<script>
import Vue from 'vue'

export default {
  name: 'Login',
  data () {
    return {
      username: '',
      password: ''
    }
  },

  methods: {
    login: function (username, password) {
      let user_obj = {
        "username": username,
        "password": password
      }
      this.$http.post('http://192.168.1.151:8000/api/token/auth', user_obj)
      .then((response) => {
        console.log(response.data)
        this.$session.start()
        this.$session.set('jwt', response.data.token)
        Vue.http.headers.common['Authorization'] = 'JWT' + response.data.token

        // this.$router.push('/')

      })
      .catch((error_data) => {
        console.log(error_data)
      })
    }
  }
}
</script>

HereIWantUserGETRequest.vue

<script>
export default {
  data() {
    return {
      msg: "Welcome",
      my_list: []
    }
  },
  beforeCreate() {
    // IF SESSION DOESN'T EXIST
    if (!this.$session.exists()) {
      this.$router.push('/account/login')
    }
  },
  mounted() {
    this.getData()
  },
  methods: {
    getData: function() {
      this.$http.get('http://192.168.1.151:8000/api/user/data')
        .then((response) => {
          console.log(response.data)
          this.my_list = response.data
        })
        .catch((error_data) => {
          console.log(error_data)
        })
    }
  }
}
</script>

当然,我在 main.js 中设置了 VueSession 和 VueResource

import VueSession from 'vue-session'
import VueResource from 'vue-resource'

Vue.use(VueResource)
Vue.use(VueSession)

最佳答案

编辑

Vue.http.headers.common['Authorization'] = 'JWT' + response.data.token

Vue.http.headers.common['Authorization'] = 'JWT ' + response.data.token

希望对你有帮助

关于javascript - 授权 header 不适用于 http GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50132989/

相关文章:

javascript - jQuery 基于单选验证输入文本控件

javascript - 将 Backbone 与 Nodejs 集成

javascript 变量在初始化后未定义

javascript - 在 Vuejs 中使图片可点击

javascript - 在另一个 promise 中解决 promise

javascript - Object.keys(obj).length 的快速替代方案

vue.js - 在 nuxt js 中使用 axios 进行身份验证过期后重定向

vue.js - 如何在 VueJs 的本地存储中 'watch' 新创建的行?

javascript - 通过 cloudflare 提供的对 vue 资源的 Ajax 响应数据未从 Chrome 中的 json 解析

javascript - 什么样的数据应该被缓存?