node.js框架 koa2的学习(二)

tech2023-09-13  99

一、koa2 打造安全的用户密码加密机制

通过学习,虽然可以对数据库的可以进行插入操作了,但是现在使用的都是普通的明文密码,这在实际工作中是肯定不允许,需要对密码进行加密和加盐的处理。 加密处理密码的加密有很多种加密算法,比如我们使用的MD5加密或者hash256加密算法,其实他们都是hash的算法。就是把你的密码进行一次不可逆的编译,这样就算别人得到了这个密码值,也不能进行直接登录操作。 我们可以通过(http://www.atool.org/hash.php) 网站,直观的看一下加密的算法。 加盐处理有了加密的处理,我们的密码就安全多了,但是有用户的密码设置的太过简单,很好进行暴力破解或者用彩虹表破解,这时候感觉我们的密码又不堪一击了。这时候我们要使用加盐技术,其实就是把原来的密码里,加入一些其他的字符串,并且我们可以自己设置加入字符串的强度。把加盐的数据库密码进行hash处理后,再存入数据库就比较安全了。 当然还有很多更严谨更可靠的加密机制,小伙伴可以自行探索一下,这个项目我们就是用加盐加密的方法处理用户的密码。 bcrypt的使用简介: bcrypt是一种跨平台的文件加密工具。bcrypt 使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。 用npm 进行安装npm instal --save bcrypt --registry=https://registry.npm.taobao.org 这里注意如果你安装失败了,试着是用淘宝源来进行安装,因为bcrypt里边的二进制包的下载可能是被墙掉了。安装完成后就是引入bcryptconst bcrypt = require('bcrypt') 然后是用pre每次进行保存时都进行加盐加密的操作。//每次存储数据时都要执行 userSchema.pre('save', function(next){ //let user = this console.log(this) bcrypt.genSalt( SALT_WORK_FACTOR,(err,salt)=>{ if(err) return next(err) bcrypt.hash(this.password,salt, (err,hash)=>{ if(err) return next(err) this.password = hash next() }) }) })

二、Koa2的用户操作的路由模块化

所有的路由都写在index.js里显然不是正确的选择,这会导致我们的index.js页面越来越臃肿,最后变的没办法维护。我们需要把Koa程序模块化,我们也叫做路由模块化。 安装koa-router我们使用npm来安装koa-router,需要注意的是在终端中我们要进入到service文件夹下,然后再输入如下命令:npm install koa-router --save 我现在使用的版本是7.4.0,大家一定要注意一下自己的版本,如果版本不同,可能学习的时候稍有区别。 建一个User.js的文件编写我们User.js文件:const Router = require ('koa-router') let router = new Router() router.get('/',async(ctx)=>{ ctx.body="这是用户操作首页" }) router.get('/register',async(ctx)=>{ ctx.body="用户注册接口" }) module.exports=router;

让路由模块化

首先在index.js的文件顶部,引入koa-router

const Router = require('koa-router')

引入我们的user.js模块

let user = require('./appApi/user.js')

装载所有子路由

let router = new Router(); router.use('/user',user.routes())

加载路由中间件

app.use(router.routes()) app.use(router.allowedMethods())

这四步作完了,我们就可以在浏览器中实验一下我们的模块化路由是否起作用了。在浏览器中输入,http://localhost:3000/user,已经可以出现我们设定好的页面了。 总结:通过这种简单的模块化路由机制,我们就实现了文件的分离,当然这并不是最完美的方案,如果对要求比较高的小伙伴,可以看一下egg.js的路由写法或者直接使用egg.js来进行开发。当然现在的这种做法完全可以应付小型项目的开发了。

To be continued …

最新回复(0)