koa+vue+vuex
# install dependencies
npm install
# serve with hot reload at localhost:8080(前端项目)
npm run dev
# build for production with minification(前端项目)
npm run build
# build for production and view the bundle analyzer report
npm run build --report
#启动服务端项目
node server/bin/www
#初始化数据库
node init/index
For a detailed explanation on how things work, check out the guide and docs for vue-loader.
基于koa2+vue+mysql搭建的管理系统(正在开发中...):honeybee:
遇到的问题:
用户登录成功之后,生成存放用户信息的session
存到mysql
中,同时将sessionId
存cookie
发送给客户端,由于该cookie
是httpOnly
状态的,因此无法在客户端通过js获取。
在进行ajax请求时设置credentials:include
,并且在服务端设置Access-Control-Allow-Credentials:true
。这样无需获取response中的cookie,在下次进行客户端向服务端请求时会自动携带上存放sessionId的cookie。
关于Request.credentials:(https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials)
参考文章:https://segmentfault.com/q/1010000007435062
更新
开始采用session实现登录状态的管理,但是需要将session存入到数据库或者redis缓存中,影响服务端性能。后来采用token的方式实现登录状态管理。使用jsonwebtoken
实现。密码加密预采用bcryptjs
实际的开发中可能会遇到这样的需求,当用户长时间不进行服务端请求时系统自动退出登录。
解决思路:(假设规定的超时时间为半小时)客户端在登录之后进行首次服务端请求时携带当前时间的时间戳,与登录时的时间戳(即token
创建时间)进行比较,若两个时间差超出半小时,则token此时应该是失效的(token
在创建时也设置过期时间为半小时),让用户冲重新登录;若两个时间差小于半小时,则将此次请求的时间戳存放到缓存中或者数据库中,起个名字叫last_time_stamp
,在下次服务端请求时将携带的时间戳与last_time_stamp
进行比较,如果超出半小时,则让用户重新登录;如果小于半小时并且token的过期时间还没到,则默认用户为登录状态;如果小于半小时并且token
的过期时间已到,则默认用户为登录状态,并且重新生成token返回给客户端,last_time_stamp
更新为此次的时间戳,用作下次请求服务端时的对比。