请使用node.js和express-jwt写一份完整token处理以及中间件并且全局使用中间件
时间: 2024-06-12 11:05:52 浏览: 172
这里是一个使用 Node.js 和 express-jwt 库来实现 Token 处理和中间件的示例代码:
首先安装需要的依赖库:
```
npm install express express-jwt jsonwebtoken
```
然后,在 Express 应用程序中添加以下代码:
```javascript
const express = require('express');
const jwt = require('jsonwebtoken');
const expressJwt = require('express-jwt');
const app = express();
// 设置加密密钥
const secretKey = 'mysecretkey';
// 创建一个 JWT token
const createToken = (payload) => {
return jwt.sign(payload, secretKey, { expiresIn: '1h' });
};
// 解析 JWT token
const decodeToken = (token) => {
return jwt.verify(token, secretKey);
};
// 中间件:检查 JWT token 是否有效
const checkToken = expressJwt({ secret: secretKey });
// 使用中间件
app.use(checkToken);
// 路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.get('/login', (req, res) => {
// 假设已经验证用户名和密码成功
const token = createToken({ username: 'testuser' });
res.json({ token });
});
app.get('/data', (req, res) => {
// 从头部获取 token
const token = req.headers.authorization.split(' ')[1];
// 解析 token 中的数据
const decoded = decodeToken(token);
res.send(`Welcome, ${decoded.username}!`);
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
```
在这个示例中,我们创建了一个 JWT token,设置了一个加密密钥,并且在 `/login` 路由中返回了这个 token。在 `/data` 路由中,我们从头部获取 token,并且使用 `decodeToken()` 函数解析出其中的数据。
然后,我们使用 `expressJwt()` 方法创建了一个中间件 `checkToken`,用于检查请求头部中的 token 是否有效。最后,我们通过 `app.use(checkToken)` 将中间件应用到整个应用程序中,使得每个请求都会经过这个中间件进行身份验证。
这样,我们就可以在整个应用程序中使用 JWT token 进行身份验证了。
阅读全文