前言

由于自己开发的项目中用到了 JWT 技术,前端采用了 Vue.js 框架,后端采用了 CodeIgniter 框架,故作此文帮助使用相同技术栈的朋友们。

具体思路如下:
把后端生成的 JWT token 存入 localStorage,然后前端切换路由(刷新页面)的时候,通过 Ajax 请求的时候带上这个 token,提交给后端判断当前的 token 是否有效,后端返回结果。

JWT 用处很多,可以用于后台权限的限制、接口安全性校验。

使用教程

前端 Vue.js

vue-router

登录时,将后端返回的 token 存入 localStorage

使用 Vue-Router 判断是否存在 token,不存在跳转至登录

// JWT 用户权限校验,判断 TOKEN 是否在 localStorage 当中
router.beforeEach(({name}, from, next) => {// 获取 JWT Tokenif (localStorage.getItem('JWT_TOKEN')) {// 如果用户在login页面if (name === 'login') {next('/');} else {next();}} else {if (name === 'login') {next();} else {next({name: 'login'});}}
});

axios

axios 全局配置拦截器
每次向后端请求携带 头信息

src/main.js 当中加上以下代码:

// http request 拦截器
axios.interceptors.request.use(config => {if (localStorage.JWT_TOKEN) {  // 判断是否存在token,如果存在的话,则每个http header都加上tokenconfig.headers.Authorization = `token ${localStorage.JWT_TOKEN}`;}return config;},err => {return Promise.reject(err);});// http response 拦截器
axios.interceptors.response.use(response => {return response;},error => {if (error.response) {console.log('axios:' + error.response.status);switch (error.response.status) {case 401:// 返回 401 清除token信息并跳转到登录页面store.commit('LOG_OUT');router.replace({path: 'login',query: {redirect: router.currentRoute.fullPath}});}}return Promise.reject(error.response.data);   // 返回接口返回的错误信息});Vue.prototype.$http = axios;

后端 CodeIgniter

后端 Controller 接收请求头信息,验证 token 有效性,无效返回 401 状态码

    $header = $this->input->get_request_header('Authorization', TRUE); // 获取请求头 Authorizationlist($token) = sscanf($header, 'token %s'); // 提取 tokenif ($header != '' && jwt_helper::validate($token)) {$userid = jwt_helper::decode($header)->userId; // 解码token 提取 userId 字段// do something} else {show_error("Permission denied", 401, "Please check your token."); // 401错误}

这里提供了自己使用的封装好的 JWT Helper 类 和 JWT 的库 使用方法和文件可以访问 Github
仓库:https://github.com/52admln/JW...

安全性

可参考文章:http://www.cnblogs.com/xiekel... 当中的基于JWT的Token认证的安全问题

前后端分离之JWT(JSON Web Token)的使用相关推荐

  1. 前后端分离之JWT用户认证

    前后端分离之JWT用户认证 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时 ...

  2. JWT(JSON web token)

    1.什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contain ...

  3. 关于JWT(Json Web Token)的思考及使用心得

    什么是JWT? JWT(Json Web Token)是一个开放的数据交换验证标准rfc7519(php 后端实现JWT认证方法一般用来做轻量级的API鉴权.由于许多API接口设计是遵循无状态的(比如 ...

  4. 关于JWT(Json Web Token)的思考及使用心得 1

    什么是JWT? JWT(Json Web Token)是一个开放的数据交换验证标准rfc7519(https://tools.ietf.org/html/r...,一般用来做轻量级的API鉴权.由于许 ...

  5. sau交流学习社区-songEagle开发系列:Vue + Vuex + Koa 中使用JWT(JSON Web Token)认证

    一.前言 JWT(JSON Web Token),是为了在网络环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519). JWT不是一个新鲜的东西,网上相关的介绍已经非常多了.不是很了解的 ...

  6. JWT(JSON Web Token)简介及实现

    JWT(JSON Web Token):是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为Json对象安全地传输信息.由于此信息是经过数字签名的,因此可以被验证和信 ...

  7. jwt token 过期刷新_如何在SpringBoot中集成JWT(JSON Web Token)鉴权

    这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token). 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具 ...

  8. php 完全前后端分离使用jwt,前后端分离,在 angular 8 中利用 JWT 进行身份认证

    最近项目项目中用angular8进行前端开发,所以近期会收集整理angular相关的文章发出来,中间遇到的坑也会发出来.本文原文是angular6的,不过angular8同样适用. JWT 是什么,为 ...

  9. JWT (Json Web Token)教程

    JWT(Json Web Token)是实现token技术的一种解决方案,JWT由三部分组成: header(头).payload(载体).signature(签名). 头 JWT第一部分是heade ...

  10. 什么是 JWT -- JSON WEB TOKEN

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...

最新文章

  1. Java正则表达式--字符集范围:并集、交集和差集
  2. 判断字符串是否以指定字符开头
  3. Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)
  4. python二元多次函数拟合_Python实现的拟合二元一次函数功能示例【基于scipy模块】...
  5. Java数据类型以及变量的定义
  6. cwinthread*线程指针怎么销毁结束_最新版Web服务器项目详解 01 线程同步机制封装类...
  7. 数据库优化 - MYSQL优化
  8. C# ---- GC中代的递增规律
  9. Linux下添加eigen头文件,移植Eigen库到SylixOS下及使用方法
  10. 移远EC20 4G模块Linux驱动移植和测试
  11. uint32 转 float 示例
  12. 《Adobe Photoshop CS4中文版经典教程》目录—导读
  13. 深度学习: Epoch 是什么?
  14. 什么叫冷备用状态_线路和设备冷备用和热备用的状态分别是什么意思?
  15. 安装Ubuntu虚拟机
  16. 英语六级高频词汇速记 + 2018-12-1听力 Day03
  17. 估值调整 - 时间调整
  18. 看完抖音,感觉我穷我活该,跟个废物一样
  19. 微信小程序接入微信客服【超详细,仅需3步】
  20. 搞定Markdown中的图片,一劳永逸的方法!

热门文章

  1. 利用 Commons-Fileupload 实现文件上传分析(转)
  2. O365 打开或关闭脚本功能
  3. Java NIO1:I/O模型概述
  4. [PaPaPa][需求说明书][V2.0]
  5. 用线程安全随机数解决Random在多线程中随机性重复的问题
  6. 雷林鹏分享:jQuery EasyUI 菜单与按钮 - 创建链接按钮
  7. createrepo命令
  8. ABAP术语-Implementation
  9. 描述cookie,sessionstroage,localstrage的区别
  10. [我的常识]动物庄园里说鼻环,到底为啥要穿鼻环呢