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

在上一次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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值