关于JWT
JWT 全称 JSON Web Token,是代替传统 session 认证的解决方案。其原理是服务端生成一个包含用户唯一标识的 JSON 对象,颁发给客户端。客户端请求需要权限的接口时,只要把这个 JSON 再原样发回给服务端,服务器通过解析就可识别用户。
它通常是这个样子:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
这个 JSON 对象通过 . 分成三段,包含了请求头(加密算法)、负载信息(如 userId、过期时间),还有通过服务端密钥生成的签名来保证不被篡改。
这种机制使服务端不再需要存储 Token,因此是非常轻量的用户认证方案。并且对于微服务这种需要不同服务间共用 Token 的跨域认证,JWT 是目前的首选。
安装
npm install jsonwebtoken -S
引入jsonwebtoken
//ES6
import jwt from 'jsonwebtoken'
//ES5
const jwt = require('jsonwebtoken')
签发token
token中一般包含的是用户id和过期时间,千万不要将用户密码放在token中
//定义 签名密钥
const SECRETKEY = 'qqqqqq'
//签名
//生成token
export const signToken = (data) => {
//过期时间
let expiresIn = SECRETKEY.expired
const token = jwt.sign({
userId: data.userId,
userLeavel: data.userLeavel,
status: data.status
},SECRETKEY.key,{
expiresIn
})
let tokenData = 'Bearer '+ token
return tokenData
}
验证token
解析token后可以校验是否过期 或者无效token判断用户是否正常登陆,且可以从中获得当前操作的用户是谁
// 校验token
export const checkToken = (token,res) => {
try {
return jwt.verify(token, SECRETKEY.key)
} catch (error) {
if(error.name == 'TokenExpiredError'){
responseCode.invalidRequest(res,'登陆失效,请重新登陆')
}else if(error.name == 'JsonWebTokenError'){
responseCode.forbiddenRequset(res,'登陆凭证无效,访问被拒绝')
}else {
responseCode.invalidRequest(res,'解析凭证失败,请重新登陆')
}
}
}
版权属于:Citrons
本文链接:https://www.citrons.cn/express/288.html
转载时须注明出处及本声明