1、用户登录业务逻辑
页面:必须要有静态服务器,样式(快速 -> bootstrap),JS(ajax -> promise异步请求)
接口:必须有数据库,连接库mongoose(ODM 架构)

init 初始化动作
安装:cnpm i -S express@4 mongoose
整理项目:README.md,package.json
编写业务:
1、静态业务:static下的所有文件都是静态的 -> 模块化 js模块(引入外部资源) css模块(引入外部资源)
2、服务业务:入口(entry),模块化 -> model模块

2、使用bootstrap实现登录页面和首页
栅格系统:-- bootstrap 设计模式,从4.x开始使用24栅格
12栅格:把一行分为12列,使用display: inline-block;使用@media (max/min-width: 768px)
24栅格:把一行分为24列,使用display: flex;

本地引用,CDN网络加速
免费的CDN:https://www.bootcdn.cn/
---------------------------------------------------------------------------
1、用户登录接口实现
a、登录接口实现
b、请求数据处理,以及接口响应

use tianji_db;
db.user_info.insertMany([
{id: 'zhangsan01', name: '张三01', password: 'zhangsan01'},
{id: 'zhangsan02', name: '张三01', password: 'zhangsan02'}
]);

id 相当于一个主键,它必须唯一

1、用户登录接口中数据加密方法
为了保证一个隐私数据(用户密码、账号信息、财务信息),国际业务
a、常用加密方式
只需要加密,不需要解密(不可逆加密):MD5 -> 撞库 把所有的可能全部进行加密,然后进行碰撞
需要加解密:
AES常用对称加密:加密方式和解密方式一致,加解密密钥
DES非对称加密:加密和解密的密钥不一致,在生成私钥的时候,也要生成一个对应的公钥;常用于桌面系统或则后端应用

b、常用加解密库
cnpm i -S crypto-js
c、解决登录密码传递问题
密码传递使用不可逆加密 -- MD5
前端加密后进行传递,后端也对密码加密,然后对比
------------------------- 这是休息线 -------------------------
1、常用票据实现方法
数据请求,需要前端和后端配合拦截处理
http请求是无状态--因为每一次请求都是三次握手,四次挥手,前端与后端就没有任何关系
解决无状态的办法:
带上一个状态:请求结束的时候,后端生成一个随机数(随机算法得到的一个数据),给到前端,前端缓存起来,在下一次请求的时候带上这个数据,实现方案是cookie
cookie可以模拟,可以伪造,另外form提交会自动带上cookie,所以就造成了跨站攻击

a、原理
请求不会自动带上,数据要要求高度加密
票据 -- token,需要在请求的时候,在请求头上header主动加上
b、实现方案
使用对称加密,密钥不会给前端,
CryptoJS.AES.encrypt('admin', 'fldsjlkfjdlkfjdsjlfdsjlfjs43225t45fe').toString()
CryptoJS.AES.decrypt('U2FsdGVkX1/WSsgezJJBlH2hpggIMRG8FLqbQTb9BHA=', 'fldsjlkfjdlkfjdsjlfdsjlfjs43225t45fe').toString(CryptoJS.enc.Utf8)