请使用node.js和express-jwt写一份完整token处理以及中间件并且全局使用中间件
时间: 2024-05-02 16:21:45 浏览: 21
以下是一份完整的token处理和中间件:
```javascript
const jwt = require('jsonwebtoken');
const expressJwt = require('express-jwt');
// 配置jsonwebtoken
const JWT_SECRET = 'secret';
const JWT_EXPIRATION_TIME = '1h';
// 生成token
const generateToken = payload => {
return jwt.sign(payload, JWT_SECRET, { expiresIn: JWT_EXPIRATION_TIME });
};
// 验证token
const validateToken = (req, res, next) => {
expressJwt({ secret: JWT_SECRET })(req, res, err => {
if (err) {
return res.status(401).json({
error: err.message
});
}
next();
});
};
// 中间件
const middleware = (req, res, next) => {
// 获取token
const token = req.headers['authorization'] && req.headers['authorization'].split(' ')[1];
if (!token) {
return res.status(401).json({
error: 'Token not found'
});
}
// 验证token
jwt.verify(token, JWT_SECRET, (err, decoded) => {
if (err) {
return res.status(401).json({
error: 'Token is invalid'
});
}
req.user = decoded;
next();
});
};
// 全局使用中间件
app.use(middleware);
```
使用方法:
```javascript
// 生成token
const token = generateToken({ username: 'john' });
// 验证token
app.get('/protected-route', validateToken, (req, res) => {
res.json({
message: 'Welcome to the protected route!'
});
});
```
在上面的例子中,我们定义了一个`generateToken`函数来生成token,还定义了一个`validateToken`中间件来验证token是否有效。我们还定义了一个`middleware`中间件来获取和验证token,并将解码后的用户信息存储在`req.user`中。最后,我们使用`app.use(middleware)`来全局使用中间件。
在路由中使用`validateToken`中间件来保护需要验证token的路由。这样,只有在提供有效的token时,才能访问受保护的路由。
这是一种基本的方式来处理token,并且使用`express-jwt`可以让我们更轻松地验证token。