在登录界面:输入账号密码向后端调登录接口,后端设置一个key 为userInfo的cookie。
但是,问题来了。
在vue项目中,本地启动的服务器中,登录的时候没有这个userInfo这个cookie,但是打包后放到测试服务器上,登录的时候就有这个userInfo了。
请问大佬们,这是哪里出的问题?
大佬们快帮帮我,要不后端要和我干架了。。。。
在登录界面:输入账号密码向后端调登录接口,后端设置一个key 为userInfo的cookie。
但是,问题来了。
在vue项目中,本地启动的服务器中,登录的时候没有这个userInfo这个cookie,但是打包后放到测试服务器上,登录的时候就有这个userInfo了。
请问大佬们,这是哪里出的问题?
大佬们快帮帮我,要不后端要和我干架了。。。。
本地的服务器和接口的服务器不是同一个域吧.
举个栗子:
你的本地服务器是localhost:8080
, 然鹅你调用的接口地址是192.168.0.111/api/login
这个接口, 后端在处理时它只能将 cookie 存入后端接口的那个域中, 也就是192.168.0.111
这里.
这就解释了本地获取不到, 然鹅在测试服务器上可以. 放在测试服务器上就相当于都在后端服务器里面跑起来的web服务.
大致是这个意思
解决方案
这就是跨域了。出于安全,访问不了。将你的资源放到接口地址的那个站点下面访问。
首先肯定是跨域了,跨域时部分浏览器默认不携带cookie,因此为了携带cookie需要设置一下xmlhttprequest的withCrendetails属性,使用vue-resouce时设置如下
Vue.http.options.credentials = true
用axios时,可以在拦截器中设置如下
axios.interceptors.request.use((config) => {
config.withCredentials = true
return config
}, (error) => {
return Promise.reject(error)
})
其次后端允许跨域的header也要设置一个响应的东西
'Access-Control-Allow-Headers' 'X-Requested-With';
同时后端设置需要注意一点,下面这个头不能设置成*号了,要设置成你的域名
'Access-Control-Allow-Origin' '*';
在详细点的可以看看我写的一篇博客https://www.cnblogs.com/heior...
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答4.7k 阅读✓ 已解决
4 回答4.3k 阅读✓ 已解决
修改host文件把域名指向自己。然后部署nginx,接口指到后台那边,页面指到自己本地。