koa2+vue+axios搭建一个博客台管理系统之session踩坑
之前记得博客后台管理系统相当简陋,只做了简单的sessionStorage的来验证是否登陆。。。。这个验证可以说是有和没有没多大区别!现在准备用session来做登陆验证
之前记得博客后台管理系统相当简陋,只做了简单的sessionStorage的来验证是否登陆。。。。这个验证可以说是有和没有没多大区别!现在准备用session来做登陆验证
下面就开始我的表演
一、先说一下我博客管理系统和服务端用到的东西
我的博客的服务端是采用的koa2 + MySQL,后台管理界面采用的是:Vue+ElementUi+axios。这都是些常规组合,没有什么好说的。
二、服务端
koa2-cors: 用来是设置跨域请求;
1 | // 官方推荐配置 |
koa-session-minimal: 因为koa本身并不能处理 session,在 koa 中处理 session 需要其他中间件的支持,在网上一番搜索后,发现很多人用的这个,于是我也用了。。。;
koa-mysql-session: 用来吧session存到数据库里面
1 | // 这两个模块用法 |
一切准备就绪,开始试试session吧
1. 在输入正确的用户名和密码后,先设置一下session的信息
1 | ctx.session = { |
此时,我们能看到在数据库和浏览器的登陆请求中已经有了session值,如图:
但是,
当我请求其他接口的时候,发现浏览器的请求头里面的cookie不见了!!!,对,没有了。。。不管我发起什么请求,在后端请求里面都拿不到我需要的用户信息
1 | //如果后端拿到了浏览器的cookie |
拿到的始终是一个空的 {},
通过去各大搜索引擎搜索发现:axios默认是不让ajax请求头部携带cookie的,:anguished:,需要手动设置:
1 | axios.defaults.withCredentials=true;//让ajax携带cookie |
好吧,:triumph:手动设置就设置吧,也不是什么难事。
设置完后重新登陆。。。
阿西吧!!!!:anger:登不上去了,控制台报错了。。。。
1 | Failed to load http://localhost:3500/login: Response to preflight request doesn't pass access control check: |
怎么又跨域了?!!之前不是设置了允许跨域请求吗???
。。。咱们继续上搜索引擎找找去。。。
header信息 Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin不可以为 ‘‘,因为 ‘‘ 会和 Access-Control-Allow-Credentials:true 冲突,需配置指定的地址:shit::shit::shit::shit:
好吧,咱又去修改之前的cors的配置
1 | // 修改前 |
设置后终于可以正常登陆了,通过ctx.session也能成功拿到用户信息了:smiley::smiley::smiley::smiley::smiley::smiley: