分享基于Express的node服务端实现token的设置、验证和解析,下载即可使使用
gitbub地址: github.com/cgq001/expr…
常用相关依赖
npm install express -S //Express 轻量级的node web框架
npm install jsonwebtoken -S //JWT生成Token
npm install express-jwt -S //JWT生成的Token的验证和解析
npm install cors -S //node跨域
app.js页面配置
const express = require('express')
const app = express()
const path = require('path')
//引入post请求解析插件
const bodyParser = require('body-parser')
//node跨域设置
const cors = require('cors')
// 配置静态目录
app.use(express.static(path.join(__dirname,'public')))
// 配置body-parser
app.use(bodyParser.json({limit: '10mb'}))
app.use(bodyParser.urlencoded({limit: '10mb', extended: true}))
// 配置跨域
app.use(cors());
// 引入index路由文件
const index = require('./router/index')
app.use('/index',index)
//配置端口,上线建议直接指定
const port = process.env.PORT || 5005
//启动服务器
app.listen(port,()=>{
console.log('开启服务器')
})
router/index.js路由文件
const express = require('express');
const jwt = require('jsonwebtoken')
const Routers = express.Router();
const { secretKey } =require('../token/constant') //提取Token加密内容 ,见下
// 全局验证Token是否合法
const tokens = require('../token/index') //验证Token配置文件,见下
//注册token配置文件
Routers.use(tokens)
// 如果token过期或者 错误的处理(结尾附 过期和错误的代码区别)
Routers.use(function (err, req, res, next) {
if (err.name === 'UnauthorizedError') {
// 这个需要根据自己的业务逻辑来处理( 具体的err值 请看下面)
res.status(401).send('非法token');
}
})
// 验证服务是否开启
Routers.get('/', (req,res) => {
console.log(req.user); //解析token,获取token携带的数据
res.json({
code: 0,
msg: '查询成功',
data:{
username: '这是首页'
}
})
})
// 登陆并生成token
Routers.get('/load', (req,res) => {
let tokenObj={ //携带参数
id: 1,
username: '小明'
}
let tokenKey = secretKey //加密内容
let token = jwt.sign(tokenObj,tokenKey,{
expiresIn: 60*60*24 // token时长
})
res.json({
code: 0,
msg: '查询成功',
token:token,
data:{
username: '12456'
}
})
})
module.exports = Routers;
Token验证的配置文件 ../token/index
const expressJwt = require('express-jwt');
const { secretKey } = require('./constant');
const jwtAuth = expressJwt({secret: secretKey}).unless({path:['/index/load']})
//unless 为排除那些接口,不验证Token,这里排除 '/index/load'
//注意这里的排除 为整个服务端路由,我们这里的 router/index.js 下的 /load 路由,实际是出于 /index 路由之下,详见app.js页面 app.use('/index',index) 配置
module.exports = jwtAuth;
公共配置 ../token/constant
const crypto = require('crypto');
module.exports = {
MD5_SUFFIX: '805696667',
md5: (pwd) => {
let md5 = crypto.createHash('md5');
return md5.update(pwd).digest('hex');
},
secretKey: 'nodebook_index' //Token加密公共部分
};