一、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里边的二进制包的下载可能是被墙掉了。安装完成后就是引入bcrypt
const bcrypt
= require('bcrypt')
然后是用pre每次进行保存时都进行加盐加密的操作。
userSchema
.pre('save', function(next
){
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 …