ziwei3749 / blog

已停止更新..转移至 https://segmentfault.com/u/ziwei3749

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JWT踩坑跨域问题

ziwei3749 opened this issue · comments

JWT踩坑跨域问题

使用jtw作为登录验证的整体思路是这样的:

login接口里,后端在response header里返回一个 token_id

而前端需要在AJAX全局拦截器里判断。

如果我本地内存或者cookie里,目前有token_id,那就在ajax之前设置request.header

request.header.set('token_id',‘xxxxx’)

如果本地内存或者cookie没有token_id,那么就在ajax请求之后,从response.header里拿token_id存下来

之后的每次ajax请求,都在request.header里携带这个token_id

遇到的坑1: 登录时,看到response.header已经返回了token_id,但是通过request.header拿不到token_id字段

原因我们使用CORS跨域,后端需要设置Access-Control-Allow-Header: token_id

后端需要允许token_id这个字段被访问。

这次由于后端忘了修改该字段,导致无法拿到token_id

遇到的坑2: 还是跟CORS有关,

控制台报错

Failed to load http://10.0.1.10:81/api/yrBackstage/logout: Request header field tid is not allowed by Access-Control-Allow-Headers in preflight response.

其实就是后端的Access-Control-Allow-Headers不允许我传递tid字段

Access-Control-Allow-Headers: content-type,yrb_id

解决方法就是

  • 后端设置Access-Control-Allow-Headers
  • 或者前端不传递tid,改用后端允许的yrb_id