基于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 相关文章推荐
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
jquery ui dialog ie8出现滚动条的解决方法
Dec 06 Javascript
jQuery cdn使用介绍
May 08 Javascript
jQuery focus和blur事件的应用详解
Jan 26 Javascript
判断一个对象是否为jquery对象的方法
Mar 12 Javascript
jquery 3D 标签云示例代码
Jun 12 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
原生javascript实现图片按钮切换
Jan 12 Javascript
js轮盘抽奖实例分析
Apr 17 Javascript
详解Vue 动态添加模板的几种方法
Apr 25 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
获取远程文件大小的php函数
2010/01/11 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
python正则表达式match和search用法实例
2015/03/26 Python
Python实现简单登录验证
2016/04/13 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Python实现手势识别
2020/10/21 Python
python 批量将中文名转换为拼音
2021/02/07 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
酒店应聘自荐信
2013/11/09 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
爱晚亭导游词
2015/02/09 职场文书
自荐信模板大全
2015/03/27 职场文书
教师节祝酒词
2015/08/11 职场文书