基于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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
用js闭包的方法实现多点标注冒泡示例
May 29 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
Jul 21 Javascript
基于ajax实现文件上传并显示进度条
Aug 03 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
Apr 23 Javascript
深入理解JS异步编程-Promise
Jun 03 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
JavaScript数组排序小程序实现解析
Jan 13 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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
React组件生命周期详解
2017/07/03 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
python实现统计代码行数的方法
2015/05/22 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Python处理文本换行符实例代码
2018/02/03 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
工厂实习感言
2014/01/14 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
关于美容院的活动方案
2014/08/14 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
消防宣传语大全
2015/07/13 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers