基于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 1.7.2中getAll方法的疑惑分析
May 23 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
基于jQuery实现左右图片轮播(原理通用)
Dec 24 Javascript
php 修改密码实现代码
May 24 Javascript
JS字符串去除连续或全部重复字符的实例
Mar 08 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
VUE基于NUXT的SSR 服务端渲染
Nov 30 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
Feb 20 Javascript
webpack 代码分离优化快速指北
May 18 Javascript
用JS实现一个简单的打砖块游戏
Dec 11 Javascript
vue下载二进制流图片操作
Oct 26 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
DOMXML函数笔记
2006/10/09 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
Js+XML 操作
2006/09/20 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
python实现中文转换url编码的方法
2016/06/14 Python
python中set常用操作汇总
2016/06/30 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
Python中整数的缓存机制讲解
2019/02/16 Python
python多线程抽象编程模型详解
2019/03/20 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
Python内置加密模块用法解析
2019/11/25 Python
基于python检查矩阵计算结果
2020/05/21 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
前台文员岗位职责及工作流程
2013/11/19 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
社会学专业求职信
2014/02/24 职场文书
个人德育工作总结
2015/03/05 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技