基于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 urldecode URL解码的问题
Jan 08 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
jquery通过visible来判断标签是否显示或隐藏
May 08 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
10分钟学会写Jquery插件实例教程
Sep 06 Javascript
关于iframe跨域POST提交的方法示例
Jan 15 Javascript
Express之get,pos请求参数的获取
May 02 Javascript
node前端模板引擎Jade之标签的基本写法
May 11 Javascript
vue+element导航栏高亮显示的解决方式
Nov 12 Javascript
node.js如何自定义实现一个EventEmitter
Jul 16 Javascript
vue中 this.$set的使用详解
Nov 17 Vue.js
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/06/10 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
Js 中debug方式
2010/02/07 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
javascript实现表单验证
2016/01/29 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
利用python如何处理nc数据详解
2018/05/23 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python re模块和正则表达式
2021/03/24 Python
音乐教学案例
2014/01/30 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
党支部意见范文
2015/06/02 职场文书