egg.js 跨域 设置cookie

JavaScript027

egg.js 跨域 设置cookie,第1张

情形: egg.js 做后端接口, jQuery做前端请求。

设想:调用user/login接口后,后端设置cookie,然后前端每次请求都会自动带上cookie。

然而现实是后面的请求在控制台中,根本没有cookie而且后端打印后面的接口也是没有cookie的。

后端跨域设置见: https://www.jianshu.com/p/202d760758d2

解决办法:

后端设置cookie:

前端ajax接口(login接口,后续的接口)都加上withCredentials:

xhrFields: {

withCredentials: true

},

crossDomain: true,

ajax设置后,已经有cookie了。

egg.js controller中其他接口中获取浏览器带过来的cookie:

清除cookie直接使用null替换即可:

正常情况下,浏览器禁止跨域获取cookie

一般通过sso服务可以实现取得跨域cookie,思路如下:

域A页面访问位于域A的服务器,对权限进行验证

域A服务器于域B服务器通信,记录一个唯一的加密串用作身份验证域(并将cookie信息发送给域B服务器)

域A服务器返回302跳转,跳转到域B下,并将加密串作为url的一部分

页面由域A跳转到域B,域B服务器通过加密串获取到事先从域A服务器上得到的cookie信息,并在响应头中添加set-cookie字段设置cookie