切换模式
token生成与验证
express-jwt 是一个用于验证 JSON Web Tokens (JWT) 在 Express 应用中的中间件。它允许你以一种声明式的方式来保护你的路由,只允许那些提供了有效 JWT 的请求访问
安装依赖
首先,安装 express-jwt 和 jsonwebtoken
bash
npm install express-jwt jsonwebtoken
npm install express-jwt jsonwebtoken
基本配置
jwt.js
生成token的方法
js
const jwt = require('jsonwebtoken')
const secret = "ultraman" // 密钥
const JWT = {
createToken: (data,time) => {
return jwt.sign(data,secret,{expiresIn:time})
}
}
module.exports = JWT
const jwt = require('jsonwebtoken')
const secret = "ultraman" // 密钥
const JWT = {
createToken: (data,time) => {
return jwt.sign(data,secret,{expiresIn:time})
}
}
module.exports = JWT
接口内生成token
js
const JWT = require('../utils/jwt.js');
exports.login = (req, res, next) => {
try {
let {username, password} = (req.body);
if(!username || !password) throw new Error('Invalid username or password');
res.json({
code: 200,
msg: '登录成功',
token: JWT.createToken({ username, password }, '3600s'),
});
} catch (error) {
next(error);
}
}
const JWT = require('../utils/jwt.js');
exports.login = (req, res, next) => {
try {
let {username, password} = (req.body);
if(!username || !password) throw new Error('Invalid username or password');
res.json({
code: 200,
msg: '登录成功',
token: JWT.createToken({ username, password }, '3600s'),
});
} catch (error) {
next(error);
}
}
验证token
在 app.js
中使用 express-jwt
中间件来验证 token
js
const { expressjwt } = require("express-jwt");
// 保护所有需要认证的路由
app.use(
expressjwt({
secret: 'ultraman', // 用于签名和验证 JWT 的密钥
algorithms: ['HS256'] // 允许使用的签名算法
})
);
const { expressjwt } = require("express-jwt");
// 保护所有需要认证的路由
app.use(
expressjwt({
secret: 'ultraman', // 用于签名和验证 JWT 的密钥
algorithms: ['HS256'] // 允许使用的签名算法
})
);
添加白名单
创建 whiteApi.js
文件,用于存放不需要验证 token 的路由
js
const whiteApi = [
'/api/login'
]
module.exports = whiteApi
const whiteApi = [
'/api/login'
]
module.exports = whiteApi
在 app.js
中添加白名单路由
添加 .unless({path: whiteApi})
到 express-jwt
中间件中,以允许白名单中的路由访问而不需要验证 token
js
const whiteApi = require('./utils/whiteApi.js');
// 保护所有需要认证的路由
app.use(
expressjwt({
secret: 'ultraman', // 用于签名和验证 JWT 的密钥
algorithms: ['HS256'] // 允许使用的签名算法
}).unless({path: whiteApi})
);
const whiteApi = require('./utils/whiteApi.js');
// 保护所有需要认证的路由
app.use(
expressjwt({
secret: 'ultraman', // 用于签名和验证 JWT 的密钥
algorithms: ['HS256'] // 允许使用的签名算法
}).unless({path: whiteApi})
);