当前位置: 首页 > Web前端 > HTML5

koa2+vue+axios搭建博客平台管理系统踩session

时间:2023-04-05 01:12:18 HTML5

原文发表在我的个人博客:http://www.brandhuang.com下面开始我的表演。首先说说我的博客管理系统我博客的服务器端使用的是koa2+MySQL,后台管理界面使用的是:Vue+ElementUi+axios。这些都是一些规律的组合,没什么好说的。2.server==koa2-cors:==用于设置跨域请求;//官方推荐配置varKoa=require('koa');varcors=require('koa2-cors');varapp=newKoa();app.use(cors());==koa-session-minimal:==因为koa本身不能处理session,所以在koa中处理session需要其他中间件的支持。在网上搜索了一下,发现很多人用这个,所以我也用了。..;==koa-mysql-session:==用它来存储数据库中的session//这两个模块的用法constsession=require('koa-session-minimal');constMysqlStore=require('koa-mysql-session');//session存储配置constsessionMysqlConfig={user:config.database.USERNAME,password:config.database.PASSWORD,database:config.database.DATABASE,host:config.database.HOST,}//配置session中间件app.use(session({key:'USER_SID',store:newMysqlStore(sessionMysqlConfig),cookie:{//cookie相关的配置domain:'localhost',//domainnamewherecookiewritepath:'/',//cookie写入的路径maxAge:1000*300,//cookie的有效时长httpOnly:true,//是否只在http请求中使用getoverwrite:false//是否允许重写}}))万事俱备,我们来试试session1输入正确的用户名和密码后,先设置session信息ctx.session={user:res[0]['account'],id:res[0]['id']}此时我们可以看到在数据库和浏览器的登录请求中已经有session值了,如图::::hljs-center:::但是我请求其他接口的时候发现浏览器请求header里面的cookie没有了!!!,是的,没有了。..无论我发起什么请求,都无法在后端请求中获取到我需要的用户信息//如果后端获取到浏览器的cookie//在后端可以通过ctx.session.user//获取我们登录在成功之后设置的用户信息一直为空=={}==,在各大搜索引擎搜索发现:==axios默认不允许ajax请求头携带cookie==,需要手动设置:axios.defaults.withCredentials=true;//让ajax携带cookies好吧,手动设置一下,不难。设置好后重新登录。..阿西!!!!无法登录,控制台报错。...无法加载http://localhost:3500/login:对预检请求的响应未通过访问控制检查:响应中“Access-Control-Allow-Credentials”标头的值为“”,必须为“true”'当请求的凭据模式为“include”时。因此不允许访问源“http://localhost:8080”。XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。怎么又跨域了?!!之前不是不允许跨域请求吗???...我们继续在搜索引擎上寻找吧。..header信息Access-Control-Allow-Credentials:trueAccess-Control-Allow-Origin不能为'',因为''会和Access-Control-Allow-Credentials:true冲突,需要配置指定地址。好了,我们再修改一下之前cors的配置//修改前app.use(cors())//修改后如下app.use(cors({origin:['http://localhost:8080'],//允许跨域名域请求:['内容类型','授权','接受'],}));设置好后,终于可以正常登录了,通过==ctx.session==也能成功获取到用户信息紧接着,又一个问题诞生在我的服务终端是前后台管理系统共享的。他们在不同的港口。..但是这个跨域只允许设置一个域名。..,算了,先睡觉吧,性命重要,明天再来!不全,已经用了jwt,基于token验证方式,所以请求携带cookie时不用担心跨域问题