使用JWT实现Token鉴权与cors跨域
安装express-jwt
npm i express-jwt
1.0 创建express服务器并开启监听
const express = require("express")
const server = express()
2.0 开启cors跨域
const cors = require('cors')
server.use(cors())
3.0 设置uploads为静态资源目录
server.use('/uploads',express.static('uploads'))
4.0 设置jwt
const { expressjwt:jwt } = require("express-jwt")
console.log(jwt);
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
secret: 'czh', // 生成token时的 钥匙,必须统一
expiresIn: '365d', // token的有效期
algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
path: ['/api/login','/api/reguser', /^\/uploads\/.*/] // 除了这两个接口,其他都需要认证
}));
5.0 通过路由中间件来 加载不同的路由
const userRouter = require('./router/users_ruoter')
const cateRouter = require('./router/cate_router')
const accountRouter = require('./router/account_router')
const finishProductRouter = require('./router/finish_product')
const semiManufacturesRouter = require('./router/semi_manufactures')
server.use('/api',accountRouter);
server.use('/my',userRouter);
server.use('/my/article',cateRouter);
server.use('/api',finishProductRouter);
server.use('/api',semiManufacturesRouter);
6.0 错误处理中间件用来检查token合法性
server.use((err, req, res, next) => {
console.log('有错误', err)
if (err.name === 'UnauthorizedError') {
// res.status(401).send('invalid token...');
res.status(401).send({ code: 1, message: '身份认证失败!' });
}
});
完整代码:
// 1.0 创建express服务器并开启监听
const express = require("express")
const server = express()
// 2.0 开启cors跨域
const cors = require('cors')
server.use(cors())
// 3.0 设置uploads为静态资源目录
server.use('/uploads', express.static('uploads'))
// 4.0 设置jwt
const { expressjwt: jwt } = require("express-jwt")
console.log(jwt);
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
secret: 'czh', // 生成token时的 钥匙,必须统一
expiresIn: '365d', // token的有效期
algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
path: ['/api/login', '/api/reguser', /^\/uploads\/.*/] // 除了这两个接口,其他都需要认证
}));
// 5.0 通过路由中间件来 加载不同的路由
const userRouter = require('./router/users_ruoter')
const cateRouter = require('./router/cate_router')
const accountRouter = require('./router/account_router')
const finishProductRouter = require('./router/finish_product')
const semiManufacturesRouter = require('./router/semi_manufactures')
server.use('/api', accountRouter);
server.use('/my', userRouter);
server.use('/my/article', cateRouter);
server.use('/api', finishProductRouter);
server.use('/api', semiManufacturesRouter);
// 6.0 错误处理中间件用来检查token合法性
server.use((err, req, res, next) => {
console.log('有错误', err)
if (err.name === 'UnauthorizedError') {
// res.status(401).send('invalid token...');
res.status(401).send({ code: 1, message: '身份认证失败!' });
}
});
// 1.0.1 开启监听
server.listen(8080, () => {
console.log("您的服务器已经在8080端口就绪了");
})
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果