基于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 相关文章推荐
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
Mar 07 Javascript
基于jquery的blockui插件显示弹出层
Apr 14 Javascript
异步动态加载js与css文件的js代码
Sep 15 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
JavaScript随机生成信用卡卡号的方法
Apr 07 Javascript
Seajs是什么及sea.js 由来,特点以及优势
Oct 13 Javascript
详谈js中数组(array)和对象(object)的区别
Feb 27 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
Jul 04 jQuery
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 Javascript
JQuery选中select组件被选中的值方法
Mar 08 jQuery
layer弹出层父子页面事件相互调用方法
Aug 17 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
PR值查询 | PageRank 查询
2006/12/20 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python的print用法示例
2014/02/11 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python可视化实现代码
2019/01/15 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
理工大学毕业生自荐信
2013/11/01 职场文书
信仰心得体会
2014/09/05 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
nginx请求限制配置方法
2021/07/09 Servers