nodejs 加密登录注册


项目环境: 后端:nodejs+express+sequelize 前端:react+antui 加密采用bcryptjs

1.nodejs介绍

根据其他学习网站中的描述,nodejs就是一个运行在服务端的JavaScript,也就是说nodejs实现了使用js编写服务端的功能,如果你对编程语言的进行深入了解的仅有JavaScript的话,那么我推荐你可以了解一下nodejs,这样你在仅仅使用js的情况下就可以进行全栈的开发。
对于nodejs的学习这里主要推荐还是nodejs官网

2.express介绍

express是一个比较小的web开发框架,也是目前我们公司用的比较多的一个框架,使用nodejs+express可以很简洁的完成后端接口,使用express的话也比较方便,以下步骤是来自express官网

2.1安装express

$ mkdir myapp//创建文件夹
$ cd myapp//进入文件夹内
$ npm install express --save//安装express

2.2进行简单的接口编写

const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Example app listening on port 3000!'))

上述代码表示监听的为3000端口,使用'node app.js'命令将项目启动,进入浏览器或接口测试工具postman中输入127.0.0.1:3000即可获取上述第三行代码中的返回值'hello world!'

3.sequelize介绍

sequelize是一个连接数据库和访问数据库的框架,在nodejs中使用sequlize可以非常方便的进行连接和操作数据库,甚至可以抛弃最常用的sql语句,使用自身所提供的各种方法进行数据的增删改查,让代码看起来更加的一致和简洁。学习的话主要推荐两个网址一个是官网,另外一个是中文版的api文档方便查找,不过想要深入了解建议研读官网。

对于sequelize的学习在中文版的api文档中也有说明,在此就不做过多说明。

(对于React的介绍由于自身了解的并不是很深入,以后在做说明。。。)

4.功能实现

注册和登录的功能相比较其他功能简单一些;
注册加密流程图:

对密码加密
插入
用户名 密码
用户名 密文
数据库

登录加密流程图:

根据用户名获取数据库中的密文
比对
Y
N
用户名 密码
密码 密文
得到结果
提示登录成功
提示登录失败

4.1注册

直接上代码了,关键点会在代码中注释出来:
bcryptjs的安装方式npm install bcryptjs , bcryptjs的npm地址

const bcrypt = require('bcryptjs');//引入bcryptjs
app.post('/addUser', function (req, res, next) {
    var salt = bcrypt.genSaltSync(10);//设置加密等级,如果不设置默认为10,最高为10
    res.setHeader('Access-Control-Allow-Origin', '*');
    try {
        let name = req.body.username;
        let password = req.body.password;
        var hash = bcrypt.hashSync(password, salt);//将获取到的密码进行加密,得到密文hash
        console.log("name:---->", name, "password:--->", password, "hash:---->", hash);
        if (!name || !password) {
            res.send({
                "code": 200,
                "message": L10N.ERROR_PARAMETER
            });
            return next();
        }
        db.addUser(name, hash);//将用户名和密文一同插入至数据库中
        res.send({
            "code": 200,
            "message": "Success"
        })
    } catch (err) {
        next(err)
    }
})

测试后台输出:
后台输出
数据库中数据:
在这里插入图片描述

4.2 登录

app.get('/login', function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    db.login(req.body.username, req.body.password).then(userinfo => {//根据用户名获取数据库中的密文
        if (userinfo == null && userinfo) {
            res.status(200).send({
                "code": 200,
                "message": L10N.ERROR_USER_PASSWD
            });
        } else {
            let password = userinfo.password;//获取密文
            if (bcrypt.compareSync(req.body.password, password)) {//将输入的密码与密文进行比对
                res.status(200).send({
                    "code": 200,
                    "message": "success!"
                });
            } else {
                res.status(200).send({
                    "code": 200,
                    "message": "error!"
                });
            }
        }
    });
});

测试结果:
在这里插入图片描述
至此,加密情况下的登录注册已经基本完成,中间省略了部分无关紧要的代码,对于安全系数较高的项目只采用这种加密方式也是远远不够的。对于文章中的不足希望积极指出~

( LPL洲际赛冲!!!!)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值