基于vue 实现token验证的实例代码


Posted in Javascript onDecember 14, 2017

vue-koa2-token

基于vue的 做了token验证

前端部分(对axios设置Authorization)

import axios from 'axios'
import store from '../store'
import router from '../router'
//设置全局axios默认值
axios.defaults.timeout = 6000; //6000的超时验证
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
//创建一个axios实例
const instance = axios.create();
instance.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
axios.interceptors.request.use = instance.interceptors.request.use;
//request拦截器
instance.interceptors.request.use(
  config => {
    //每次发送请求之前检测都vuex存有token,那么都要放在请求头发送给服务器
    if(store.state.token){
      config.headers.Authorization = `token ${store.state.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  }
);
//respone拦截器
instance.interceptors.response.use(
  response => {
    return response;
  },
  error => { //默认除了2XX之外的都是错误的,就会走这里
    if(error.response){
      switch(error.response.status){
        case 401:
          store.dispatch('UserLogout'); //可能是token过期,清除它
          router.replace({ //跳转到登录页面
            path: 'login',
            query: { redirect: router.currentRoute.fullPath } // 将跳转的路由path作为参数,登录成功后跳转到该路由
          });
      }
    }
    return Promise.reject(error.response);
  }
);
export default instance;

 然后在路由文件中

//注册全局钩子用来拦截导航
router.beforeEach((to, from, next) => {
 //获取store里面的token
 let token = store.state.token;
 //判断要去的路由有没有requiresAuth
 if(to.meta.requiresAuth){
  if(token){
   next();
  }else{
   next({
    path: '/login',
    query: { redirect: to.fullPath } // 将刚刚要去的路由path(却无权限)作为参数,方便登录成功后直接跳转到该路由
   });
  }
 }else{
  next();//如果无需token,那么随它去吧
 }
});

后端(node) 我们封装了一个中间件 在需要验证token的路由,加上这个中间件

router.get('/dosh',checkToken,User.dosh)
const jwt = require('jsonwebtoken');

1、使用jsonwebtoken 创建token

const jwt = require('jsonwebtoken');
//登录时:核对用户名和密码成功后,应用将用户的id(图中的user_id)作为JWT Payload的一个属性
module.exports = function(user_id){
  const token = jwt.sign({
    user_id: user_id
  }, 'sinner77', {
    expiresIn: '3600s' //过期时间设置为60妙。那么decode这个token的时候得到的过期时间为 : 创建token的时间 + 设置的值
  });
  return token;
};

2、对于前端的请求,校验接口

//检查token是否过期
module.exports = async ( ctx, next ) => {
  if(ctx.request.header['authorization']){
    let token = ctx.request.header['authorization'].split(' ')[1];
    //解码token
    let decoded = jwt.decode(token, 'sinner77');
    //console.log(decoded);的输出 :{ user_id: '123123123', iat: 1494405235, exp: 1494405235 }
    if(token && decoded.exp <= new Date()/1000){
      ctx.status = 401;
      ctx.body = {
        message: 'token过期'
      };
    }else{
      //如果权限没问题,那么交个下一个控制器处理
      return next();
    }
  }else{
    ctx.status = 401;
    ctx.body = {
      message: '没有token'
    }
  }
};

代码托管github 欢迎star

https://github.com/yxl720/vue-koa2-token

总结

以上所述是小编给大家介绍的基于vue 实现token验证的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery页面图片伴随滚动条逐渐显示的小例子
Mar 21 Javascript
jQuery中append()方法用法实例
Dec 25 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
Apr 14 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
javascript执行环境及作用域详解
May 05 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
vue项目打包后打开页面空白解决办法
Jun 29 Javascript
用Node提供静态文件服务的方法
Jul 06 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
JavaScript从原型到原型链深入理解
Jun 03 Javascript
JS一次前端面试经历记录
Mar 19 Javascript
JavaScript实现左侧菜单效果
Dec 14 #Javascript
JavaScript实现全选取消效果
Dec 14 #Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
Dec 14 #Javascript
javascript实现数字配对游戏的实例讲解
Dec 14 #Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 #Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
Dec 14 #Javascript
vue项目中的webpack-dev-sever配置方法
Dec 14 #Javascript
You might like
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
php实现复制移动文件的方法
2015/07/29 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
再论Javascript的类继承
2011/03/05 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Python struct模块解析
2014/06/12 Python
Python中集合类型(set)学习小结
2015/01/28 Python
python提取内容关键词的方法
2015/03/16 Python
Python yield 使用方法浅析
2017/05/20 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python实现斗地主分牌洗牌
2020/06/22 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
印度民族服装购物网站:BIBA
2019/08/05 全球购物
高中生操行评语大全
2014/04/25 职场文书
2014年党务公开方案
2014/05/08 职场文书
记账会计岗位职责
2014/06/16 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
python基于机器学习预测股票交易信号
2021/05/25 Python