Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JWT 鉴权

JWT 鉴权

作者头像
Ewall
修改于 2023-09-23 11:49:50
修改于 2023-09-23 11:49:50
1.7K00
代码可运行
举报
文章被收录于专栏:vue学习vue学习
运行总次数:0
代码可运行

使用 koa-jwt + jsonwebtoken 完成用户鉴权功能。 项目地址:https://github.com/Ewall1106/mall

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install koa-jwt jsonwebtoken --save
  • 先明确一下两者的关系:koa-jwt 是负责对 token 进行验证的,而 jsonwebtoken 是负责生成 token 的。

JWT 鉴权

  • app.js 中引入并使用。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Koa = require('koa');
const jwt = require('koa-jwt');

const app = new Koa();

// 1. 错误信息处理
app.use(async (ctx, next) => {
  return next().catch((err) => {
    if (401 == err.status) {
      ctx.body = {
        code: 50001,
        message: '用户鉴权失败',
      };
    } else {
      throw err;
    }
  });
});

// 2. 中间件注册
app.use(jwt({ secret: JWT_SECRET }).unless({ path: [/^\/public/, /\/login/] }));
  • 1 处是定义了当鉴权失败的时候,koa 服务返回的一些内容。
  • 2 处就是 koa-jwt 这个中间件的注册。
    • 其中 JWT_SECRET 是一个加密因子,可以提升安全性,你也可以设置成123456,但是为了更安全点推荐用密钥生成器生成一段密钥。
    • 后面的 path 路径是设置匹配不需要鉴权的路由或目录,比如我这里设置了所有的 public 开头的、登录 xxxx/login 的请求都不需要鉴权。

Token 生成

  • 还是前面说到的,koa-jwt 是负责对 token 进行验证的,而 jsonwebtoken 是负责生成 token 的,所以接下来看我们如何进行 token 的生成。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// controller/UserController.js
const jwt = require('jsonwebtoken');

async login(ctx, next) {
  // ...
  // 在登录成功后
  const token = jwt.sign({ uid: user._id }, JWT_SECRET, { expiresIn: '15d' });
  ctx.body = {
    code: 200,
    entry: {
      token: token
    },
  };
},
  • 如上,利用 jsonwebtoken 这个库,其实 token 的生产很简单。
    • { uid: user._id } 就是一个 payload 数据载体,就是你可以放些参数在 token 中,比如用户的 id
    • JWT_SECRET 就是前面提到的加密因子,要跟 koa-jwt 设置的保持一致。
    • expiresIn 设置 token 的过期时间。
  • 至此,服务端的鉴权主要功能就完成了。

前端设置

  • 在前端,首先我们需要登录的时候获取这个 token,然后把它放到 vuex 中或者本地缓存起来。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 登录
login(loginInfo).then((res) => {
  const { token } = res.entry;
  console.log('token', token);
});
  • axios 请求拦截器中设置 Authorization 鉴权头,每次请求的时候都带上 token 值。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// src/utils/request.js

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    if (store.getters.token) {
      // JWT鉴权
      config.headers.Authorization = `Bearer ${getToken()}`;
    }
    return config;
  },
  (error) => {
    console.log(error);
    return Promise.reject(error);
  }
);
  • 然后服务端的 koa-jwt 就会通过读 Authorization 这个 header 头中的 token 值来进行比对校检鉴权了。
  • 至此,我们使用 koa-jwt + jsonwebtoken 完成了用户鉴权功能,具体代码实现请移步项目仓库中。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【架构师(第四十二篇)】 服务端开发之常用的登录鉴权方式
简单的,如果业务系统都在同一主域名下,比如 wenku.baidu.com 、 tieba.baidu.com ,就可以直接把 cookie domain 设置为主域名 baidu.com ,百度也就是这么干的
一尾流莺
2022/12/10
5050
【架构师(第四十二篇)】 服务端开发之常用的登录鉴权方式
Koa、koa-router、koa-jwt 鉴权详解:分模块鉴权实践总结
熟悉Koa的同学都知道use是用来注册中间件的方法,相比较Koa中的全局中间件,koa-router的中间件则是路由级别的。
周陆军博客
2023/04/09
1.4K0
【Node】使用 koa 实现一个简单JWT鉴权
全称 JSON Web Token, 是目前最流行的跨域认证解决方案。基本的实现是服务端认证后,生成一个 JSON 对象,发回给用户。用户与服务端通信的时候,都要发回这个 JSON 对象。
GopalFeng
2022/08/01
1.8K0
【Node】使用 koa 实现一个简单JWT鉴权
手把手搭建koa2后端服务器-登录认证
现在我们的开发方式都是采用前后端分离的方式,因此后端一般都只提供数据,这就造成前后端域名不同,存在跨域请求的问题,浏览器为了安全方面考虑,对跨域请求有限制。为了避免非同源请求的失败,我们需要采取跨域资源共享 CORS 来解决这个问题。
星星在线
2022/04/27
7260
手把手搭建koa2后端服务器-登录认证
koa2使用jwt鉴权
至此已经实现了基础鉴权,但是由于这里使用了restful api,获取资源的操作与修改、删除操作使用的是相同的路径,而koa-unless只支持单一的url匹配或者method匹配,两者无法混用,于是需要改写koa-unless:
4O4
2022/04/25
5020
koa2使用jwt鉴权
Nodejs+koa.js实现服务端内容(超级详细
最近在使用vue3和typesript写一个后台系统的demo。对于一些登录及内容数据不想单纯的使用假数据模拟,所以从零搭建一个nodejs的后端内容
KID.
2023/10/08
8571
鉴权实战 - Koa
Bearer token 组成:Header、payload(载荷)、Signature(签名) Header.Payload.Signature
Cellinlab
2023/05/17
4770
Koa - 初体验(写个接口)
  这几年node.js确实是越来越火了,好多公司对node.js都开始有要求。虽说前端不一定要会后端,但想要成为一个优秀的前端,node.js是必经之路。
WahFung
2020/08/24
1.5K0
Koa2+MongoDB+JWT实战--Restful API最佳实践
Web API 已经在最近几年变成重要的话题,一个干净的 API 设计对于后端系统是非常重要的。
前端森林
2020/04/23
9.8K0
Koa2+MongoDB+JWT实战--Restful API最佳实践
前端小白玩转koa(三)
文章地址:https://cloud.tencent.com/developer/article/2471047
一起重学前端
2024/11/27
1350
深入浅出 Koa2:现代 Node.js 框架
Koa2 是一个现代的、简洁的 Node.js 框架,由 Express 团队设计和开发。与 Express 相比,Koa2 提供了更加精简和强大的功能,特别是其中间件处理机制和异步编程能力,深受开发者喜爱。本文将详细介绍 Koa2 的安装、基本用法、核心概念及其高级功能,并通过示例代码展示如何构建一个功能完整的 Web 应用程序。
Michel_Rolle
2024/07/31
3.1K0
Node.js 使用 express-jwt 解析 JWT
JWT 全称 JSON Web Token,是代替传统 session 认证的解决方案。其原理是服务端生成一个包含用户唯一标识的 JSON 对象,颁发给客户端。客户端请求需要权限的接口时,只要把这个 JSON 再原样发回给服务端,服务器通过解析就可识别用户。
张凯强
2019/11/19
3.8K0
Node.js 使用 express-jwt 解析 JWT
JWT 到底应该怎么用才对?
JWT 全称为 JSON Web Token,是一份开源的标准协议,它定义了一种传输内容基于 JSON、轻量级、安全的数据传输方式。
松鼠专栏
2020/03/24
3.3K0
JWT 到底应该怎么用才对?
常见登录认证 DEMO
basic auth 是最简单的一种,将用户名和密码通过 form 表单提交的方式在 Http 的 Authorization 字段设置好并发送给后端验证
JS菌
2019/07/30
2.9K0
node.js+vue.js搭建程序设计类课程教学辅助系统
  毕业才刚刚两个多月而已,现在想想大学生活是那么的遥不可及,感觉已经过了好久好久,社会了两个月才明白学校的好啊。。。额,扯远了,自从毕业开始就想找个时间写下毕设的记录总结,结果找了好久好久到今天才开始动笔。
用户2038589
2018/10/10
2.5K11
入门 | egg.js 入门之egg-jwt
这里创建并安装完成以后,需要再次初始化俩包,分别为egg-cors与egg-jwt token 生成的验证包
mySoul
2020/08/03
1.5K0
小程序前后端交互使用JWT
现在很多Web项目都是前后端分离的形式,现在浏览器的功能也是越来越强大,基本上大部分主流的浏览器都有调试模式,也有很多抓包工具,可以很轻松的看到前端请求的URL和发送的数据信息。如果不增加安全验证的话,这种形式的前后端交互时候是很不安全的。
拾忆2020
2020/10/21
1.8K0
Koa - 中间件(理解中间件、实现一个验证token中间件)
Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。
WahFung
2020/08/24
2.9K0
Koa - 中间件(理解中间件、实现一个验证token中间件)
koa实战_2023-02-28
sequelize这个包专门用于项目中处理关系型数据库的操作,它是基于 promise 的
用户10377376
2023/02/28
1.3K0
使用 Egg + Vue 开发在线文档管理平台(8000字,手把手教程)
团队中会遇到在线文档管理的需求,包括技术文档,接口文档, excel 文档,和产品原型的托管等需求,一直没有找到合适的开源项目来满足需求,所以动手实现了个文档管理系统(实现起来并不复杂,该教程只是提供思路,并非最佳实践)
一只图雀
2020/12/16
4.1K0
使用 Egg + Vue 开发在线文档管理平台(8000字,手把手教程)
相关推荐
【架构师(第四十二篇)】 服务端开发之常用的登录鉴权方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档