当前端访问时,没有跨域限制用session
有跨域限制就选择使用jwt
用户的信息通过token字符串的形式,保存在客户端,服务器通过还原token来认证身份
jwt由三个部分组成
Header Payload Signature
Payload 部分才是真正的用户信息
它是用户信息经过加密之后生成的字符串
Header和Signature 是安全性相关的部分‘
只是为了保证Token的安全性
JWT的使用方法
把JWT的字符串放在
Authorization:Bearer <token>
安装JWT相关的包,两个包
npm i jsonwebtoken express-jwt@5.3.3
jsonwebtoken 是用于生成jwt字符串
express-jwt 用于将jwt字符串还原成对象
const jwt=require(’jsonwebtoken‘)
const ejwt=require(’express-jwt‘)
定义secret 密钥
用于给jwt加密解密
调用jsonwebtoken包提供的方法
将用户信息加密成jwt字符串,响应给客户端
jwt.sign(
{username:user Info.username},
secreKey,//密钥
{expiresIn:"30s"}//过期时间
)
将JWT字符串还原成JSON对象
客户端每次访问那些又权限的接口时,都需要主动通过请求头中的Authorization 字段,将token字符串发送到服务器进行身份认证,此时服务器可通过express-jwt这个中间件自动将客户端发过来的token解析还原成json对象
app.use(eJWT({secret:secretKey})).unless(
{path:[/^\/api\//]})
//排除api开头的接口,以api接口开头的接口都不需要验证权限,比如注册,登录
express-jwt 解析成功之后会自动挂载到req.user上
捕获解析JWT失败后产生的错误
app.use((err,req,res,next)=>{
if(err.name=='UnauthorizedError'){
return res.send({
status:401,
message:"无效token"
})
}
return res.send({
status:500,
message:"未知错误"
})
})
【博学谷学习记录】超强总结,用心分享