基于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 相关文章推荐
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
Mar 08 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
Mar 16 Javascript
jQuery Tools tab使用介绍
Jul 14 Javascript
node.js中的console.timeEnd方法使用说明
Dec 09 Javascript
分享一个自己写的简单的javascript分页组件
Feb 15 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
Mar 05 Javascript
三种带箭头提示框总结实例
Jun 14 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
Javascript从数组中随机取出不同元素的两种方法
Sep 22 Javascript
基于Phantomjs生成PDF的实现方法
Nov 07 Javascript
JS原生带缩略图的图片切换效果
Oct 10 Javascript
JS轻量级函数式编程实现XDM三
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
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
PHP培训要多少钱
2017/06/06 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
Python动态导入模块的方法实例分析
2018/06/28 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
Servlet面试题库
2015/07/18 面试题
银行竞聘演讲稿
2014/05/16 职场文书
法律专业自荐信
2014/06/03 职场文书
建筑安全标语
2014/06/07 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
教师年终个人总结
2015/02/11 职场文书
学习委员竞选稿
2015/11/20 职场文书
Python Socket编程详解
2021/04/25 Python
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技