基于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模板插件 jquery.tmpl 动态ajax扩展
Nov 10 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
May 20 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
JS结合bootstrap实现基本的增删改查功能
Jul 22 Javascript
Javascript的动态增加类的实现方法
Oct 20 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
Apr 13 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
May 31 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中判断变量为空的几种方法小结
2013/11/12 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
详解Python中类的定义与使用
2017/04/11 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
保险专业大专生求职信
2013/10/26 职场文书
我的中国心演讲稿
2014/09/04 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
学前班语言教学计划
2015/01/20 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸