有问题的知识点
-
// [ result.status == 1 && 'token' ]: result.status == 1 && token token: result.status == 1 && token || '用户名密码错误,token不返回'
- 操作数据库 mongoose
一.token 重点
-
什么是token?
- token是一段经过后端处理【 后端加密算法 】的特殊字符,后端在前端登录时,会给前端返回这个字符,前端拿到这个字符之后,要将它存入cookie,
-
token的作用是什么?
- 项目自动登录
- 身份验证
- 前端发送的每一个数据请求,要求携带一个token数据
- 权限验证
- 普通用户
- 会员用户
- 管理员
- 原理:
- 当用户注册并登录后,后端会给它返回一个token字符,
-
使用
- 软件安装教程
- 根目录创建了一个rsa文件夹: 用于存放公钥和私钥
- 私钥 -> 加密
- 公钥 -> 解密
-
生成token要用
- 安装 openssl 软件(后端软件)
- 引入第三方模块 jsonwebtoken (npm i jsonwebtoken -S ),使用方式见npm官网
- 通过软件,在终端里面输入以下命令,能生成 非对称加密 通过私钥产生token 通过公钥解密token
// 1.产生公钥和私钥 // 产生私钥 openssl genrsa -out ./private_key.pem 1024 1024 代表私钥长度 // 产生公钥 openssl rsa -in ./private_key.pem -pubout -out ./public_key.pem
二.登陆注册流程
- 创建项目
npm express -generator -g
npx express -e . (-e 表示项目使用ejs 模板, . 表示在当前目录创建项目)
该命令在npm 是5.2以上版本会 省略安装 npm express -generator -g
- 前端发ajax 请求,并判断cookie 有没有token,有cookie token存在自动登陆。否则要生成token字符
// 自动登录
function load () {
const token = cookieUtil.get('TOKEN')
if ( token ) {
setTimeout(function () {
location.href = "./index.html"
},2000)
}
}
//发请求,少些内容了
$.ajax({
url: 'http://localhost:3000/login',
data: {
username: $('#username').val(),
password: $('#password').val(),
token: cookieUtil.get( 'TOKEN' )
},
})
- epxress 脚手架 响应数据和打造接口
router.route(’/login’).post(( req,res,next )=>{} ) 这是配置路由的一种链式写法
router.post(’/login’,( req,res,next )=>{} ) 这是配置路由的另一种写法
req.body 是前端发送请求发送来的内容
res.render(‘login’,{ data: {})===== login第一个参数是渲染模板名字,第二个参数是发给前端的值
const router = express.Router()
router.route('/login')//配置路由
.post( async ( req,res,next )=>{
})
// 进行数据库操作
const result = await users.query( req.body )
res.render('login',{
//login 是渲染的模板ejs的名字,后缀名可省略
data: JSON.stringify({
//data是返回给前端的内容
status: result.status,
info: result.info,
token: result.status == 1 &&