express 通过 authorization 验证用户有什么权限的代码
时间: 2024-03-21 20:43:22 浏览: 13
在 Express 应用程序中,您可以使用中间件函数来验证用户是否具有特定的权限。在下面的示例中,我们将使用 `jsonwebtoken` 库来解析 JWT token,然后检查用户是否具有指定的权限。
```javascript
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
// 准备一些模拟用户数据
const users = [
{ id: 1, name: 'Alice', role: 'admin' },
{ id: 2, name: 'Bob', role: 'user' },
{ id: 3, name: 'Charlie', role: 'user' }
];
// 中间件函数用于验证 Authorization 头部的 JWT token 和用户权限
function authorize(role) {
return (req, res, next) => {
// 获取 Authorization 头部的值
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
// 如果 Authorization 头部不存在或格式不正确则返回 401 错误
if (!token) {
return res.status(401).json({ error: 'Unauthorized' });
}
try {
// 验证 JWT token 是否有效
const decoded = jwt.verify(token, 'secret_key');
// 检查用户是否具有指定的角色
const user = users.find(u => u.id === decoded.id && u.role === role);
if (!user) {
return res.status(403).json({ error: 'Forbidden' });
}
// 将用户数据存储在请求对象中
req.user = user;
next();
} catch (err) {
// 验证失败则返回 403 错误
res.status(403).json({ error: 'Forbidden' });
}
};
}
// 使用中间件函数验证路由
app.get('/admin', authorize('admin'), (req, res) => {
res.json({ message: `Hello ${req.user.name}! You are an admin.` });
});
app.get('/user', authorize('user'), (req, res) => {
res.json({ message: `Hello ${req.user.name}! You are a user.` });
});
// 监听端口
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
在上面的代码中,`authorize` 中间件函数用于验证 Authorization 头部的 JWT token 和用户权限。在 `authorize` 函数中,首先获取 Authorization 头部的值,然后验证 Authorization 头部是否存在或格式是否正确。如果验证通过,则将解密的 payload 数据存储在 `req.user` 中并检查用户是否具有指定的角色。如果验证失败,则返回 401 或 403 错误。
接着,在 `/admin` 和 `/user` 路由中使用 `authorize` 中间件函数来验证用户是否具有特定的权限。如果验证通过,则返回一个简单的 JSON 响应,否则会返回 401 或 403 错误。