基于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 获得服务器控件值的方法小结
May 11 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
JavaScript之Object类型介绍
Apr 01 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
JS模拟按钮点击功能的方法
Dec 22 Javascript
如何利用Promises编写更优雅的JavaScript代码
May 17 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 Javascript
vue省市区三联动下拉选择组件的实现
Apr 28 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
Dec 18 Javascript
JS使用Date对象实时显示当前系统时间简单示例
Aug 23 Javascript
vue实现可视化可拖放的自定义表单的示例代码
Mar 20 Javascript
JS使用cookie保存用户登录信息操作示例
May 30 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读取javascript设置的cookies的代码
2010/04/12 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
javascript 回调函数详解
2014/11/11 Javascript
javascript中this的四种用法
2015/05/11 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
关于毕业的广播稿
2014/01/10 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
公司委托书格式范文
2014/04/04 职场文书
家长高考寄语
2015/02/27 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
浅谈MySQL中的六种日志
2022/03/23 MySQL
nginx配置指令之server_name的具体使用
2022/08/14 Servers