基于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 相关文章推荐
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
JS在可编辑的div中的光标位置插入内容的方法
Nov 20 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
JS设置手机验证码60s等待实现代码
Jun 14 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
Angular2环境搭建具体操作步骤(推荐)
Aug 04 Javascript
React实践之Tree组件的使用方法
Sep 30 Javascript
js原生实现移动端手指滑动轮播图效果的示例
Jan 02 Javascript
Gulp实现静态网页模块化的方法详解
Jan 09 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
Aug 12 Javascript
使用React手写一个对话框或模态框的方法示例
Apr 25 Javascript
详解vue微信网页授权最终解决方案
Jun 16 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
一个多文件上传的例子(原创)
2006/10/09 PHP
在数据量大(超过10万)的情况下
2007/01/15 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
Display SQL Server Version Information
2007/06/21 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
python连接数据库的方法
2017/10/19 Python
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
施工安全协议书
2013/12/11 职场文书
消防安全员岗位职责
2014/03/10 职场文书
商业房地产广告语
2014/03/13 职场文书
运动会广播稿200字
2014/10/18 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
幼儿园六一主持词
2015/06/30 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript