当前位置: 首页 > 后端技术 > Node.js

曲奇就在那里,我为什么不能吃呢?

时间:2023-04-03 15:37:14 Node.js

作者:codexu_浏览器中明明存在的cookies获取不到???console.log(document.cookie);//没有???因为最近没事,打算学习一下后端。既然要一探究竟,我就从最基本的注册登录开始。技术选型作为前端开发者,使用Node.js体验后端应该是最快的入门方式。看了下文档,很长。。。没太多时间看,直接上。。。框架是koa2数据库mysql,不知道怎么操作数据库,找到了.Sequelize请求axiosID账号的密码,没有加密,直接明文。登录使用jwt(jsonwebtoken)生成token。使用koa2ctx.cookies.set在后端设置cookie并保存令牌。跨域请求koa2-cors问题就出在这里。问题一:填写用户名和密码,点击登录,浏览器没有设置cookie。解决方法:使用axios请求时,添加属性withCredentials:true,这样请求就可以携带cookies。出现这种情况的原因是因为koa2-cors,如果在前端使用代理跨域,就不会出现这种情况。问题2:虽然浏览器可以看到token已经存在于cookie中,但是前端代码无法得到解决方法:koa2设置cookie时,设置httpOnly:false即可。查找由于同源策略和HttpOnly标签导致doucment.cookie无法获取cookie的原因。withCredentials:表示跨域请求是否需要凭据。默认为假。MDNXMLHttpRequest.withCredentials属性是一个布尔类型,表示是否使用cookie、授权头(headauthorization)或TLS客户端证书等资格证书。创建跨站点访问控制请求。在同一个站点下使用withCredentials属性是无效的。此外,此指示还将用作忽略响应中cookie的标志。默认值为假。如果在从另一个域发送XMLHttpRequest之前没有设置withCredentials为true,那么你就不能为它自己的域设置cookie值。通过设置withCredentials为true获得的第三方cookies仍然享受同源策略,因此无法通过document.cookie或header对应请求的脚本访问。httpOnly:服务器可以访问cookie,默认为trueMDN为了避免跨域脚本(XSS)攻击,标有HttpOnly的cookie不能通过JavaScript的Document.cookieAPI访问,只能发送到服务器。如果包含服务器端Session信息的Cookie不想被客户端JavaScript脚本调用,那么就应该为它设置HttpOnly标志。换个方式,MDN说可能会发生XSS攻击,所以换个方式,存储到localstorage中。请求时,将令牌添加到标头授权中。总结虽然绕了一圈,好像总结了两个没用的知识点,但是学习就是这样,遇到坑就积累吧。我希望有人能给我一些关于如何进行安全登录的指示。