使用EggJS开发接口(三)登录验证之egg-jwt 及 crypto加密
egg-jwt 是一个生成token的插件
token的规则:
服务器返回的token数据基本结构是 Header.Payload.Signature, header、payload、signature三部分以'.'隔开。
例如:
1 2 3 |
|
header: 一个json对象,描述JWT的元数据
payload: 一个 JSON 对象,用来存放实际需要传递的数据
signature: 对header和payload两部分的签名,防止数据被篡改
安装:
1 2 3 |
|
导入到egg项目里:
1 2 3 4 5 6 7 8 9 10 |
|
配置:
1 2 3 4 |
|
通过 jwt 生成 token:
app/controller/user.js
// 登录async login() {const { ctx, app } = this;// post请求传来的参数const { name } = ctx.request.body;// 判断数据库里面是否存在该用户const user = await ctx.service.user.login(name);if(user){// 用户存在,生成tokenconst token = app.jwt.sign({name: user.name,}, app.config.jwt.secret);ctx.body = {code: 200,message: '登录成功',data: { id: user.id },token}}}
添加中间件,以便控制jwt
module.exports = (options, app) => {return async function jwt(ctx, next) {const token = ctx.request.header.authorization;let decode = '';if (token) {try {// 解码tokenconsole.log(token);decode = ctx.app.jwt.verify(token, options.secret);await next();} catch (error) {ctx.status = 401;ctx.body = {code: 1006,message: error.message == 'invalid token' ? 'token无效' : error.message};return;}} else {ctx.status = 401;ctx.body = {code: 1006,message: '没有token'};return;}};
};
配置需要鉴权(校验token)的路由
app/router.js
'use strict';/*** @param {Egg.Application} app - egg application*/module.exports = app => {const { router, controller } = app;const jwt = app.middleware.jwt(app.config.jwt);router.post('/user/register', controller.user.register);router.post('/user/login', controller.user.login);// 添加日志 需要鉴权router.post('/diary/add', jwt, controller.diary.add);};
前端页面调用方式更改:
// 新增日志axios.post('http://127.0.0.1:7001/diary/add', fieldsValue).then((res) => {const { data } = res;if(data.code === 200){message.success(data.message || '操作成功');}else{message.error(data.message || '操作失败');}}).catch((err) => {console.log(err);})
改为
// 添加日志let token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiMTIzIiwiaWF0IjoxNTgzODM5NDk5fQ.aqKI-IN9Os0v197FMKLoJzihg7UrjgMS1s-cWWt7KSM';axios({method: 'post',url: 'http://127.0.0.1:7001/diary/add',data: fieldsValue,headers: {Authorization: `Bearer ${token}`}}).then((res) => {const { data } = res;if(data.code === 200){message.success(data.message || '操作成功');}else{message.error(data.message || '操作失败');}}).catch((err) => {console.log(err);})
注:密码的md5加密及验证
引用:crypto 已存在,不需要再次安装
1 |
|
加密:password 需要加密的内容
1 |
|
封装:
app/service/user.js
1 2 3 4 |
|
使用EggJS开发接口(三)登录验证之egg-jwt 及 crypto加密相关推荐
- 使用eggjs开发接口
使用eggjs开发接口 一.初始化项目结构 1. 创建项目目录 2. 准备工作 2.1 在app目录下创建service文件夹 2.2 在app目录下创建extend文件夹 2.3 在app目录下创建 ...
- 【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
- 数据接口的登录态校验以及JWT
混合开发的时候是怎么做的 前后端混合开发的时候,用户登录状态的管理一般都是通过session来实现的,原理很简单:用户登录后,服务端将登录用户信息存储到服务器上的特定位置,并生成对应的session ...
- Spring Security技术栈学习笔记(十三)Spring Social集成第三方登录验证开发流程介绍
开发第三方登录,我们必须首先要了解OAuth协议(本文所讲述的OAuth协议指的是OAuth2协议),本文首先简单介绍OAuth协议,然后基于Spring Social来阐述开发第三方登录需要做哪些准 ...
- 登录验证过程,PC与APP开放登录接口(支持WEB与SDK方式)
1.需求场景 登录,是一个系统的第一步功能.登录成功后,才能进入系统,使用系统功能.在某些场景下,其它系统需要接入到本系统中.或者通过接口的方式进行登录,以及通过接口的方式来取数据. 另外,系统配套移 ...
- Springboot 实现api校验和登录验证
https://blog.csdn.net/qq_36085004/article/details/83348144 2018年10月24日 17:59:29 PerkinsLi 阅读数:232 文章 ...
- Java实现Token登录验证(基于JWT的token认证实现)
文章目录 一.JWT是什么? 二.使用步骤 1.项目结构 2.相关依赖 3.数据库 4.相关代码 三.测试结果 一.JWT是什么? 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流 ...
- Spring Security自定义登录验证及登录返回结果
Spring Security自定义登录验证及登录返回结果 一.功能描述 二.处理逻辑 简单流程 自定义UserDetails 自定义UserDetailsDAO 自定义UserDetailsServ ...
- JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)
JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入) 开发流程:需求文档 接口文档 效果图 开发环境统一:JDK1.8 IDEA win10 GIT SSM SSH SpringB ...
最新文章
- 安装好Pycharm后如何配置Python解释器简易教程
- head在linux命令中什么意思,Linux系统中head命令如何使用
- 大样品随机双盲测试_训练和测试样品生成
- 【今日CS 视觉论文速览】 24 Dec 2018
- Ubuntu安装网易云音乐
- Arduino相关语法和函数
- Android 实现小红书登陆页面背景图无限滚动效果
- c语言英文字母表,26个英文字母表
- PyQt5 关于消息盒子QMessageBox 不显示消息盒子且出现内存不足的问题
- 在未来税制下个人所得税信息管理系统建设设想
- 三国鼎立企查查、天眼查、微猫的三国大战
- 华为机试od社招刷题攻略-目录
- 先验概率 后验概率 贝叶斯法则 贝叶斯公式
- 音视频技术开发周刊 | 274
- mysql substr无效_mysql substr()函数用法
- C#web弹出提示框的几种方法
- 吕本富:中国互联网太乱 完全没有游戏规则
- 三点求外接园,同时计算三点的圆弧弧长,以及半径等信息
- C/C++ 库函数查询工具MSDN
- MYSQL Archive存储引擎
热门文章
- 为什么别人不回你的微信?说说如何正确的提问
- Word怎么在方框里面打对勾
- OSPF——5种报文(图解)
- MATLAB仿真节点个数和节点通信半径与网络连通率的关系,WSN实验
- html5波浪效果,html5 canvas粒子波浪动画特效
- 神威超级计算机配置,神威太湖轻型超级计算机配置和性能列表
- 使用弗洛伊德算法(Floyd-Warshall)找到所有对最短路径长度
- effective c++ 学习笔记之 Shifting from c to c++
- DolphinDB智臾科技CEO周小华:《从反向控制的终极目标谈时序数据库的架构设计》
- 货郎担问题(分支限界法)