Node.js   发布时间:2019-10-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js的Koa实现JWT用户认证方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文介绍了Node.js的Koa实现JWT用户认证方法,分享给大家,具体如下:

一、前置知识

  1. http://www.ruanyifeng.com/blog/2017/08/koa.html">Koa 框架教程

二、环境

    @H_751_12@microsoft Visual studio 2017集成开发环境
  1. Node.js v8.9.4Javascript运行环境

三、开始动手,一步步来完善

1、创建基础的静态资源服务器、基础架构

以下是基本的代码,实现静态服务器,以及一个当token验证异常时候的处理。

下面我们将在这个基本代码下逐步增加注册、登录、信息的功能。

require('path'); // 用于处理目录路径 const Koa = require('koa'); // web开发框架 const serve = require('koa-static'); // 静态资源处理 const route = require('koa-route'); // 路由中间件 const jwt = require('jsonwebtoken'); // 用于签发、解析`token` const jwtKoa = require('koa-jwt'); // 用于路由权限控制 const koaBody = require('koa-body'); // 用于查询字符串解析到`ctx.request.query` const app = new Koa(); const website = { scheR_798_11845@e: 'http',host: 'localhost',port: 1337,join: function () { return `${this.scheR_798_11845@E}://${this.host}:${this.port}` } }

/ jwt密钥 /
const secret = 'secret';

/ 当token验证异常时候的处理,如token过期、token错误 /
app.use((ctx,next) => {
return next().catch((err) => {
if (err.status === 401) {
ctx.status = 401;
ctx.body = {
ok: false,msg: err.originalError ? err.originalError.message : err.message
}
} else {
throw err;
}
});
});

/ 查询字符串解析到ctx.request.query /
app.use(koaBody());

/ 路由权限控制 /
// 待办事项……

/ POST /api/register 注册 /
// 待办事项……

/ GET /api/login 登录 /
// 待办事项……

/ GET /api/info 信息 /
// 待办事项……

/ 静态资源处理 /
app.use(serve(path.join(__dirname,'static')));
/ 监听服务器端口 /
app.listen(website.port,() => {
console.log(${website.join()} 服务器已经启动!);
});

下面,我们将在注册、登录、信息的注释底下添加实现的代码。

2、路由权限控制

注册、登录接口、其它资源不需要认证,信息接口需要认证。

{ secret: secret }).unless({ // 设置login、register接口,可以不需要认证访问 path: [ /^\/api\/login/,/^\/api\/register/,/^((?!\/api).)*$/ // 设置除了私有接口外的其它资源,可以不需要认证访问 ] }));

3、注册

{ const body = ctx.request.body; /* * body = { * user : '御焱',* password : '123456' * } */

// 判断 body.user 和 body.password 格式是否正确
// 待办事项……

// 判断用户是否已经注册
// 待办事项……

// 保存到新用户到数据库中
// 待办事项……

// 是否注册成功
let 是否注册成功 = true;
if (是否注册成功) {
// 返回一个注册成功的JOSN数据给前端
return ctx.body = {
ok: true,msg: '注册成功',token: getToken({ user: body.user,password: body.password })
}
} else {
// 返回一个注册失败的JOSN数据给前端
return ctx.body = {
ok: false,msg: '注册失败'
}
}
}));
/ 获取一个期限为4小时的token /
function getToken(payload = {}) {
return jwt.sign(payload,secret,{ expiresIn: '4h' });
}

3、登录

{ const query = ctx.request.query; /* * query = { * user : '御焱',* password : '123456' * } */

// 判断 query.user 和 query.password 格式是否正确
// 待办事项……

// 判断是否已经注册
// 待办事项……

// 判断姓名、学号是否正确
// 待办事项……

return ctx.body = {
ok: true,msg: '登录成功',token: getToken({ user: query.user,password: query.password })
}
}));

前端获取到token之后,可以保存在任意本地存储里。

4、信息

{ // 前端访问时会附带token在请求头 payload = getJWTPayload(ctx.headers.authorization) /* * payload = { * user : "御焱",* iat : 1524042454,* exp : 1524056854 * } */

// 根据 payload.user 查询该用户在数据库中的信息
// 待办事项……
const info = {
name: '御焱',age: 10,sex: '男'
}
let 获取信息成功 = true;
if (获取信息成功) {
return ctx.body = {
ok: true,msg: '获取信息成功',data: info
}
} else {
return ctx.body = {
ok: false,msg: '获取信息失败'
}
}
}));
/ 通过token获取JWT的payload部分 /
function getJWTPayload(token) {
// 验证并解析JWT
return jwt.verify(token.split(' ')[1],secret);
}

访问需要认证的接口时,需要在request头附带Authorization:Bearer [token]字段。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持菜鸟教程。

原文链接地址:https://segmentfault.com/a/1190000014727547

大佬总结

以上是大佬教程为你收集整理的Node.js的Koa实现JWT用户认证方法全部内容,希望文章能够帮你解决Node.js的Koa实现JWT用户认证方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。