web开发
如何选择开发模式?
身份认证?(高铁刷身份证进站)
不同开发模式下的身份认证推荐
问题:http的无状态性,服务器不会自动记住你是谁......
理解Session、JWT实现原理
- 常用简单,跨域的场景下不适用
服务器开辟空间存储登录信息,生成cookie传回浏览器,浏览器请求的时候通过cookie自动发送信息给服务器,通过身份验证
存储在服务器
- 将token存储在浏览器,每次访问时携带token
存储在浏览器
cookie(了解)
浏览器会自动将对应服务器的cookie信息发送请求的时候,送往服务器
cookie:存储在用户浏览器不超过4kb的字符串,有效期,安全性,使用范围
注意: 重要且隐私的数据不能使用cookie存储
cookie
cookie具有不安全性
重要且隐私的数据不能使用cookie存储
在Express 中使用session认证
1.安装:npm i express-session
2.全局注册:app.js
resave 重新保存
secrect 密码
saveUninitalized 保存统一化
向session里存储数据
// 1.登录的 API 接口
app.post('/api/login', (req, res) => {
// 判断用户提交的登录信息是否正确
if (req.body.username !== 'admin' || req.body.password !== '000000') {
return res.send({ status: 1, msg: '登录失败' })
}
------------------------------------------------------------------
// 1.1:请将登录成功后的用户信息,保存到 Session 中
// 注意:只有成功配置了 express-session 这个中间件之后,才能够通过 req 点出来 session 这个属性
req.session.user = req.body // 用户的信息(请求体里面的信息)存储到session
req.session.islogin = true // 用户的登录状态 存储到session
res.send({ status: 0, msg: '登录成功' })
})
向session里取数据
// 2.获取用户姓名的接口
app.get('/api/username', (req, res) => {
//判断用户是否登录req.session.islogin
if (!req.session.islogin) {
return res.send({ status: 1, msg: 'fail' })
}
res.send({
status: 0,
msg: 'success',
username: req.session.user.username,//获取sessiom中存储的信息
})
})
清除session信息
req.session.destroy(),应用场景,清空当前用户存储在服务器端的session
// 退出登录的接口
app.post('/api/logout', (req, res) => {
// 3:清空 Session 信息
req.session.destroy()
res.send({
status: 0,
msg: '退出登录成功',
})
})
总结
一、全局配置session!!!
二、服务器端存储请求的数据到session中!!!
三、当跳转页面的时候判断通过 req.session.islogin 判断是否登录过
session的局限性:存在跨域问题