项目第一次用AngularJS的ajax与beego调试心得(续)

来源:互联网 发布:java中list中最小值 编辑:程序博客网 时间:2024/05/21 17:44

在上一次Angularjs的调试之后又遇到新的问题,开始不跨域,后来考虑分布式部署,不可能不跨域,最后终于搞定,在上一章后续介绍了,在服务端添加头文件,不会加的同学们可以看下上一次讲解。

那么切入主题,就说说新问题吧,用户在登录的时候一般使用的是post方式,服务器获取数据验证以后,把常用数据存入session,生成token,然后把sessionid和token加到response-header的cookie中发送给客户端,之后的所有请求客户端需要带着这两个参数来服务器进行验证,并获取数据。

新的问题就是客户端在登录以后再次访问不会吧之前发送的session和token带着返回给服务端,这样就会导致每次操作验证不通过,重新生成token和sessionid,这样就无法继续往下进行了。

于是查了很多地方找到了客户端需要加入一个字段

withCredentials:true

只有加了这个字段才会接收发送带来的cookie,具体作用是什么大家就问度娘吧。还可以设置成全局的,这个就大家自己查吧。


 $http({url:'http://10.65.102.51:8080/v1/login/',method:'POST',withCredentials: true,headers: {  'Content-Type': 'application/x-www-form-urlencoded'  },  params:{"email": $scope.login.email, "pwd": $scope.login.pwd}}).success(function(data,header,config,status){//响应成功 if ( data.Code=="200" ) { $state.go('app.dashboard');        }else{           $scope.authError = '密码或者邮箱不正确';        }}).error(function(data,header,config,status){//处理响应失败   alert("服务器无响应");});

客户端发送处都加上就可以了吗,回答是不行,回到前面,依然要在服务端加上头标签:

    this.Ctx.ResponseWriter.Header().Add("Access-Control-Allow-Credentials", "true")     //返回数据格式是json
这样才可以,然后测试发现还是不行,服务器无法响应,后来又翻到。。。。

在一开始说的跨域头中

Access-Control-Allow-Origin
设置的是*,允许所有跨域访问,这样是不行的了,要想使用上面的头,必须把*换成制定host,为了开发方便,我就在配置文件中定义了port,统一8080,然后每个请求到来的时候获取一下他的ip然后拼接成http:127.0.0.1:8080然后赋值给
Access-Control-Allow-Origin头文件,然后这样就能不同的客户端跨域请求端口必须配置8080端口,这样就能成功发送返回了。

0 0
原创粉丝点击