web页面登陆注册加密(使用nodejs+express)

一、项目工具和依赖

1、nodejs+express

登录使用了nodejs的express框架,使用之前,需要下载node和express,然后创建express项目,下载下载依赖。

npm install express;express -e homework3; //初始化项目npm install  //下载相关依赖npm start; //启动项目

然后访问本地http://localhost:3000/即可看到登陆界面

2、数据库

本次数据库采用mysql,登录本地数据库后,创建数据库和数据表。

create database hw3_1;use hw3_1;CREATE TABLE users (id  int(11) NOT NULL AUTO_INCREMENT,username char(11) NOT NULL,password text NOT NULL,salt char(30) NOT NULL,PRIMARY KEY (id),UNIQUE KEY `user_username_uindex` (username))ENGINE=InnoDB DEFAULT CHARSET=utf8;

将主键设为id,自增,然后将username设为唯一,阻止相同用户名注册。

然后修改项目中的sql.js文件。

let mysql = require('mysql');let connection = mysql.createConnection({host: 'localhost',port: 3306,user: 'root',password: '密码',database: 'hw3_1'
});connection.connect();module.exports = connection;

二、文件结构

1、总目录

2、bin和node_modules

这是项目的依赖

3、public

public里面有四个文件夹,存放的是前端登录的实现.js文件和.css文件,images和video里放的是需要的图像和视频

4、routes

routes包括了文件配置的路由信息,它包括以下文件:

5、views

包含了所有的html文件

6、app.js

项目的启动文件

三、具体实现

1、注册

  • routes\actions\register.js:接收前台传送的数据并作分析

分别判断前台传过来的注册数据是否符合规范

  • 用户名长度小于6,返回code码:-2
  • 密码长度不规范,返回code码:-3
  • 然后计算加密的盐(后面分析)
  • 然后将数据加密后插入数据库,如果用户名相同直接返回err,因为创建数据库时就保证了username不同
  • 如果注册合理,则返回code码1.
  • public\javascripts\register.js:具体的注册实现
    • 先进行密码校验,检查用户输入的密码是否符合规范(比如两次输入的密码需要一致,密码长度应该为6-20位)

    • 然后进行具体的注册逻辑实现,根据返回的code码,进行主页信息的加载

  • 如果返回1,则输出注册成功,2s后跳转,并返回登录界面
  • 然后根据不同的返回码报出相应的错误,并清空对应的输入框

2、登录

  • routes\actions\login.js:接收前台传送的数据并作分析

将从前台传过来的用户的登陆数据进行分析

  • 先从数据库中根据用户名查找salt
  • 将用户输入的密码进行相同的加密并与数据库中加密后的密码进行对比。
  • 如果相同返回1,否则返回-1。
  • /public/javascripts/login.js
    • checkStrong()函数:检验密码强度

要求密码必须包含数字,英文字母和特殊字符

  • 然后根据返回的code码进行登录验证,如果为1,就进入主界面,否则报错。

3、加密(使用salt+sha256)

  • 首先,额外在数据库中存储了一个salt密钥,在注册时随机生成

  • 之后我们将两个字符串拼接使用hashmap算法,hashmap算法能够确保一个密码对应唯一一个加密

  • 存入数据库时,将盐也一并存入
  • 而我们在登陆时,我们从数据库中取出存好的salt和用户输入的密码进行同样的加密并比对

四、结果展示

  1. 首先输入一个不存在的用户名,结果提示用户名或密码错误
  2. 然后点击注册按钮进行注册,输入一个用户名小于6位

点击注册按钮,清空密码,用户名数据,并提示。
3. 然后验证密码不相同的情况

点击注册按钮
4. 然后成功注册一个信息

点击确定,2s后跳到登陆界面
5. 进行登录,登陆成功
6. 查看数据库

可以看到,刚才注册的123456进入了数据库,密码已经加密,盐也存到数据库中了。

源码地址:https://github.com/zbxd001/nodejs-express
其他技术博客: https://www.yuque.com/dipingxianzhiguang/gxiez5/kacktt

nodejs+express实现登陆注册并加密相关推荐

  1. 登陆注册流程和token加密

    有问题的知识点 // [ result.status == 1 && 'token' ]: result.status == 1 && token token: res ...

  2. 开始nodejs+express的学习+实践(8)

    为什么80%的码农都做不了架构师?>>>    1.session使用 介绍的非常详细: http://www.cnblogs.com/chenchenluo/p/4197181.h ...

  3. Nodejs+express+vue在线音乐播放器网站

    在线音乐网站是一款多功能的音乐播放网站,本网站适用于各种音乐分享和推广平台,支持在线音乐播放试听,支持个人的音乐收藏,丰富的音乐和图片资源,是整个网站美观多彩,方便管理员的管理和信息维护,界面友好,操 ...

  4. 复盘《新冠疫苗在线预约系统》设计过程Nodejs+express+Mysql+前端

    新冠疫苗预约 使用的技术:nodejs +express +Mysql +html+bootstrap 运行环境:vscode 1. 项目的搭建 检验node环境 确认是否安装node express ...

  5. python计算机体系三层结构_Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证...

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

  6. Vue + Nodejs + Express 解决跨域的问题

    Vue + Nodejs + Express 解决跨域的问题 首先检测你的Vue的版本号 此文章针对3.0版本解决跨域问题 $ vue -V 2.X or 3.X 直接访问如下 created() { ...

  7. Node跨域cors模块,nodejs+express跨域

    Node跨域cors模块 NodeJS+Express跨域 什么是CORS CORS(Cross-origin resource sharing),跨域资源共享,是一份浏览器技术的规范,用来避开浏览器 ...

  8. Nodejs+express+vue+Elementui酒店客房管理系统

    酒店客房管理系统,本网站是基于WEB采用了BS架构开发,利用当前最流行的nodejs+vue与mysql数据库相结合的技术,针对某个酒店进行管理,实现了该酒店的现代化的信息管理,从房客到酒店的房间都进 ...

  9. 新手利用C# 实现简单仿QQ登陆注册功能

    闲来没事,想做一个仿QQ登陆注册的winform,于是利用工作之余,根据自己的掌握和查阅的资料,历时4天修改完成,新手水平,希望和大家共同学习进步,有不同见解希望提出! 废话不多说,进入正题: 先来看 ...

最新文章

  1. 如何成为一个好的测试工程师(转载,大意)
  2. java double 位运算_JAVA位运算等运算符总结
  3. c++语言中如何写入文件,C++:在多线程程序中写入文件
  4. 如何从我的Android应用程序发送电子邮件?
  5. MVC 视图与控制器传值的几种方法
  6. UNIX进程的创建,进程链和进程扇
  7. JBUILDER 2006怎么配置 STRUTS?[
  8. 【渝粤教育】国家开放大学2018年秋季 0579-22T电路及磁路(2)(一) 参考试题
  9. hasOwnProperty()方法与in操作符
  10. C语言简易贪吃蛇(附完整代码)
  11. 颜值经济风暴来袭,国产美容仪如何站稳脚跟?
  12. 少儿机器人编程课程学什么
  13. 计算机网络-应用层-万维网WWW
  14. 操作系统实验六、系统内存使用统计
  15. Oracle EBS 动态调用 XML Publisher 模板 输出不同的报表
  16. 小年|幸福是一种期盼,而生活是一种圆满!
  17. 靶向嵌合体PEG-ethoxycarbonyl-propanoic/Dodecaethylene glycol
  18. JavaSwing多线程小游戏雷霆战机
  19. Android之集成极光推送
  20. GD32F303固件库开发

热门文章

  1. AMBA——slave的HREADY信号
  2. 经典SQL数据库面试题以及答案—Oracle版本-SQL全部在plsql开发编写-欢迎提问
  3. ISP ICSP JTAG SWD
  4. 职场英语--表达认可与称赞,以及获得夸赞后如何回复
  5. (PCB系列五)AD20的PCB布线规则设定【※】
  6. Python发送消息到手机(基于IFTTT)
  7. 江苏专转本考前焦虑自救指南
  8. java JNI调用C++代码(给出一个简单java application示例和实际java web项目过程及错误解决)(一)
  9. 计算机硬盘驱动器的作用,如果计算机硬盘驱动器损坏了,有什么帮助吗?为什么有人买了坏硬盘?注意第四个目的!...
  10. 《Java程序设计》第二次实验报告