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

9 篇文章 0 订阅

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

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

  1. 所有的路由都写在index.js里显然不是正确的选择,这会导致我们的index.js页面越来越臃肿,最后变的没办法维护。我们需要把Koa程序模块化,我们也叫做路由模块化。
    安装koa-router
  2. 我们使用npm来安装koa-router,需要注意的是在终端中我们要进入到service文件夹下,然后再输入如下命令:
    npm install koa-router --save
    
  3. 我现在使用的版本是7.4.0,大家一定要注意一下自己的版本,如果版本不同,可能学习的时候稍有区别。
    建一个User.js的文件
  4. 编写我们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;
    

让路由模块化

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

    const Router = require('koa-router')
    
  2. 引入我们的user.js模块

    let user = require('./appApi/user.js')
    
  3. 装载所有子路由

    let router = new Router();
    router.use('/user',user.routes())
    
  4. 加载路由中间件

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

    To be continued …

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值