共计 2199 个字符,预计需要花费 6 分钟才能阅读完成。
基于 Vue2 + iView2.0 的后台管理系统解决方案示例.
目前实现的功能及用到的组件
- Vue
- 页面:iView2.0
- 文章列表、文章分类
- 用户列表、用户注册
- 富文本框:quillEditor
- 文件上传:使用 iView 自带的文件上传组件
- axios
项目地址
使用
git https://github.com/shanyanwt/koa_vue_blog.git
npm install // 安装依赖
npm run dev // 本地开发
npm run build // 生产部署
目录结构
.
├─build // 构建配置目录
│
└─src
│ App.vue // 入口文件
│ main.js
│
├─api //api
│
├─common // 工具类
│
├─components // 组件
│ countUp.vue // 数字滚动组件
│ uploadImg.vue // 压缩图组件
│
├─filter // 过滤器
│ dateFilter.js
│
├─router // 路由
│ index.js
│ router.js
│
├─static // 静态文件
│
├─template // 打包模板
│ index.ejs
│
├─vendors // 打包模板
│
└─view
│ about.vue // 关于我们
│ articleList.vue // 文章列表
│ main.vue // 入口
│ rtf.vue // 编辑文章
│ user.vue // 用户列表
├─index // 首页
│
└─login // 登录页
用户登录示例
使用 crypto MD5 加密
// 引入上述封装的 utils.js
import utils from '../utils.js'
let name = 'abcd'
let password = '123'
let user_ticket = utils.md5(utils.md5(name + utils.md5(password)))
console.log(user_ticket) => 3a59492a85438a3a39a30fd0d8103ac5 // 加密后的结果
//MD5 加盐登录
let name = 'abcd'
let password = '123'
var timestamp = Date.parse(new Date()) / 1000
let user_ticket = utils.md5(utils.md5(utils.md5(name + utils.md5(password))) + timestamp)
console.log(user_ticket) =>0b3298cb3c20b08318c185aec803a929 // 加盐的结果
// 服务端在通过加密后打密文和库中再次作比较
var timestamp = Date.parse(new Date()) / 1000
let user_ticket = utils.md5(utils.md5((utils.md5((this.formInline.user).toLowerCase() +
utils.md5(this.formInline.password))).toLowerCase()) + timestamp)
axios({
method: 'post',
url: api.API.admin_login,
data: {
'user_ticket': user_ticket,
'name': this.formInline.user,
'timestamp': timestamp
}
}).then(res => {if(res.error_code == consts.ERROR_CODE.SUCCESS) {
this.$Notice.success({title: '登录成功!',});
let userInfo = JSON.stringify(res.result_data)
cacheUtils.localStorage(consts.USERINFO).set(consts.USERINFO, userInfo)
this.$router.push('/home');
} else if(res.error_code == consts.ERROR_CODE.USERNAME_OR_PASS_ERRROR) {
this.$Notice.error({title: '用户名密码错误!'});
} else {
this.$Notice.error({title: '服务器挤爆了,稍后重试!'});
}
}).catch(err => {
this.$Notice.error({title: '服务器挤爆了,稍后重试!'});
})
- 管理端通过 router 的 beforeEach 进行用户是否已经登录
router.beforeEach((to, from, next) => {let userInfo = cacheUtils.localStorage(consts.USERINFO).get(consts.USERINFO)
if(!userInfo && to.name != 'login') { // 判断是否已经登录且前往的是登录页
next({name: 'login'});
} else if(userInfo && to.name == 'index') {
next({name: 'home'});
} else {next(); // 登录后继续向下执行
}
});
MD5 加盐解密案例 https://segmentfault.com/a/11…
愿你保持独立思考、不卑、不亢、不怂努力长成自己喜欢的样子
我是一只孤独的狼 …… 欢迎 star
正文完
发表至: javascript
2019-09-04