在Node.js中使用JSON Web Token(JWT)验证用户,以保护特定的路由。
首先需要安装jsonwebtoken模块:
npm install jsonwebtoken
下面是一个例子,使用jsonwebtoken验证用户并保护路由:
const jwt = require('jsonwebtoken');
const secretKey = 'MySecretKey';
// 验证用户
function verifyUser(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).send('Token not provided!');
}
try {
const decoded = jwt.verify(token, secretKey);
req.user = decoded;
next();
} catch (err) {
res.status(400).send('Invalid token!');
}
}
// 保护路由
app.get('/protected', verifyUser, (req, res) => {
res.send('This is a protected route!');
});
// 创建JWT Token
app.post('/login', (req, res) => {
const username = req.body.username;
const password = req.body.password;
// 实际应用中需要验证用户名和密码是否正确
const payload = {
username: username,
role: 'user'
};
const token = jwt.sign(payload, secretKey, {
expiresIn: '1h'
});
res.json({
token: token
});
});
以上代码中,verifyUser函数用于验证用户,如果用户的JWT Token存在且被验证通过,则调用next()函数继续访问路由。如果Token无效则返回401或400状态码。
在应用中使用app.get('/protected', verifyUser, (req, res) => {})来保护特定路由。
对于登录,可以使用app.post('/login', (req, res) => {})来创建JWT Token并将其发送给客户端,客户端可以将Token存储在LocalStorage中,并在每个请求中将其添加到请求标题中(即req.headers['authorization'])发送到服务器。
上一篇:保护路由的无限循环