在node.js里用cookie实现登录的代码
时间: 2024-05-01 20:16:30 浏览: 17
以下是一个简单的使用cookie实现登录的示例代码,仅供参考:
```javascript
const http = require('http');
const querystring = require('querystring');
const queryString = require('querystring');
const cookie = require('cookie');
// 用户数据
const users = {
alice: { password: 'alicepwd', name: 'Alice' },
bob: { password: 'bobpwd', name: 'Bob' }
};
// 生成cookie字符串
function generateCookie(user) {
return cookie.serialize('user', user.name, {
path: '/',
httpOnly: true,
maxAge: 60 * 60 // 单位为秒
});
}
// 解析cookie字符串
function parseCookie(cookieStr) {
return cookie.parse(cookieStr || '');
}
const server = http.createServer((req, res) => {
if (req.url === '/login' && req.method === 'POST') {
// 处理登录请求
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const { username, password } = querystring.parse(body);
const user = users[username];
if (user && user.password === password) {
// 登录成功,将用户信息写入cookie
res.setHeader('Set-Cookie', generateCookie(user));
res.statusCode = 302;
res.setHeader('Location', '/');
res.end();
} else {
// 登录失败,重定向到登录页面
res.statusCode = 302;
res.setHeader('Location', '/login');
res.end();
}
});
} else {
// 处理其他请求
const cookies = parseCookie(req.headers.cookie);
const user = cookies.user && users[cookies.user];
if (user) {
// 已登录,显示欢迎信息
res.setHeader('Content-Type', 'text/html;charset=utf-8');
res.write(`<h1>Welcome, ${user.name}!</h1>`);
res.write('<p>Click <a href="/logout">here</a> to logout.</p>');
res.end();
} else if (req.url === '/login') {
// 显示登录页面
res.setHeader('Content-Type', 'text/html;charset=utf-8');
res.write(`
<form method="post" action="/login">
<label for="username">Username:</label>
<input type="text" name="username" id="username"><br>
<label for="password">Password:</label>
<input type="password" name="password" id="password"><br>
<button type="submit">Login</button>
</form>
`);
res.end();
} else {
// 未登录,重定向到登录页面
res.statusCode = 302;
res.setHeader('Location', '/login');
res.end();
}
}
});
server.listen(3000, () => {
console.log('Server is listening on port 3000');
});
```