在Node.js中实现登录鉴权通常使用以下几种方式:
Cookie & Session:
- 用户登录时,后端验证用户名和密码,成功后在服务器端创建一个Session,并将Session ID作为Cookie返回给客户端。
- 客户端将Cookie存储在浏览器中,之后的请求都会携带此Cookie,服务器根据Cookie中的Session ID查找对应的Session来验证用户身份。
JSON Web Token (JWT):
- 用户登录时,后端验证用户名和密码,成功后生成一个JWT Token,并将其作为登录成功的响应返回给客户端。
- 客户端将Token存储起来,之后的请求都会在Autorization头部携带此Token。服务器对Token进行验证,以确认用户身份。
以下是使用Express框架的示例代码:
Cookie & Session:
const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}));
app.post('/login', (req, res) => {
// 假设验证逻辑是用户存在且用户名密码正确
if (validUser(req.body.username, req.body.password)) {
req.session.user = { id: 1, username: req.body.username };
res.redirect('/home');
} else {
res.status(401).send('Unauthorized');
}
});
app.get('/home', (req, res) => {
if (req.session.user) {
res.send(`Welcome, ${req.session.user.username}`);
} else {
res.redirect('/login');
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
JSON Web Token (JWT):
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
app.post('/login', (req, res) => {
// 假设验证逻辑是用户存在且用户名密码正确
if (validUser(req.body.username, req.body.password)) {
const token = jwt.sign({ userId: 1, username: req.body.username }, 'your-secret-key', { expiresIn: '1h' });
res.json({ token: token });
} else {
res.status(401).send('Unauthorized');
}
});
app.get('/home', (req, res) => {
const token = req.headers.authorization;
if (token) {
jwt.verify(token, 'your-secret-key', (err, decoded) => {
if (err) {
res.status(401).send('Unauthorized');
} else {
res.send(`Welcome, ${decoded.username}`);
}
});
} else {
res.redirect('/login');
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在实际应用中,你需要根据具体需求选择合适的鉴权方式,并且要注意安全性问题,例如使用HTTPS确保Co