起因
- 小徐和朋友决心搭建一个网站,小徐负责前端,后端的话,域名已经申请完毕,一些接口也已经做好了。小徐在本机使用vuecli开发。
- 由于localhost和网站存在跨域,需要设置代理:
proxy:"https://www.t2c.site"
(坑所在,待会详讲!)
代码部分:
<template>
<b-img src="/user/checkCode?k=0.1" onclick="this.src='/checkCode?k='+Math.random()"></b-img>
//account、password部分是两个input按钮、省略
<button type="button" id="login-button" @click="submit">Login</button>
</template>
<script>
export default {
data()
{
return{
account:'',
password:'',
checkCode:''
}
},
methods:{
submit(){
this.axios.post('/user/login',
{
account: this.account,
password: this.password,
checkCode: this.checkCode
},{ withCredentials:true })
.then( (response) =>{
console.log(response.data);
})
.catch( (error)=> {
console.log(error);
});
}
}
}
</script>
问题描述
- 需要post请求发送account、password、checkCode到后端,但由于无法携带cookie 验证码一直比对错误
- 已经按网上方法设置:(依旧无济于事)
前端main.js:axios.defaults.withCredentials=true;
后端已设置:Access-Control-Allow-Credentials: true
解决方法
就是补全域名!!!
<b-img src="https://www.t2c.site/user/checkCode?k=0.1" onclick="this.src='https://www.t2c.site/checkCode?k='+Math.random()"></b-img>
this.axios.post('https://www.t2c.site/user/login'
三个请求地址必须补全,缺一不可。
原理解析
- 这是因为cookie的domain引起,可以看到domain在后端设置为
www.t2c.site
;这规定了这个cookie只有在请求域名为www.t2c.site时才会被携带发送到后端
- 而我们起初的的requseturl仍为hocalhost
- 这就说明即使使用proxy代理,请求url如果不补齐的话,默认仍是本地的请求
- proxy代理后虽然能访问到验证码图片,却不会改变request url。(这里我也没太懂proxy代理的原理,只是猜想。如果有错,希望大佬指出)
- 所以只要补全request url就能确保携带url
验证
- 如果补全img_src和axios请求的url,就能自动识别request url,并携带cookie信息过去
结语
- 最终能解决这个困扰了一天多问题,真的很激动。于是写下了这篇文章。
- 希望大佬不吝赐教,平时只有另一个小伙伴,两个人举步维艰。
- 有很多原理都只是猜想,没来得及查阅文献。如果有错,希望大家指出!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。