前言
之前使用django开发api接口时,约定是要每次请求都要带token这个参数,这样很不方便,最近学了vue,也使用了axios,发现在axios拦截器中可以设置每次请求头中增加一个Authorization属性,用它来自动携带token就很方便了
拦截器设置
代码:
axios.interceptors.request.use(config =>{
console.log(config)
/*为请求头对象添加Token验证的Authorization对象,就不用每次都在要传送的字段上加token了*/
config.headers.Authorization=window.sessionStorage.getItem('token')
return config
})
看过我之前文章的会知道,我是每次登录后将获取的token保存在本地的sessionStorage(会话存储)中,这里在每次请求时进行拦截,将token的值通过hearder的Authorization属性传递
后端接收设置
参考之前文章
我是在后端已经设置了每次请求都会进行token验证,以前是假设用户访问接口时会携带token这个参数,现在只需从每次请求的header中取就行了,方法很简单:
使用request.META.get(“headerkey”)来获取
例:
如果headerkey为Authorization,即headers={‘Authorization’:‘1234’}
应该使用request.META.get("HTTP_AUTHORIZATION")
获取
headerkey中的小写转为大写,横线“-”转为下划线“”,并且加上前缀HTTP
尤其注意headerkey中不应该包含 HTTP前缀,以及符号"",否则会取不到对应的值
# token = request.query_params.get('token')
# 改为
token = request.META.get("HTTP_AUTHORIZATION")