Page 126 - Node.js开发指南
P. 126
5.6 用户注册和登录 119
5. 登入和登出 1
当我们完成用户注册的功能以后,再实现用户登入和登出就相当容易了。把下面的代码
加到 routes/index.js 中:
app.get('/login', function(req, res) {
res.render('login', { 2
title: '用户登入',
});
});
3
app.post('/login', function(req, res) {
//生成口令的散列值
var md5 = crypto.createHash('md5');
var password = md5.update(req.body.password).digest('base64');
4
User.get(req.body.username, function(err, user) {
if (!user) {
req.flash('error', '用户不存在');
return res.redirect('/login');
}
if (user.password != password) { 5
req.flash('error', '用户口令错误');
return res.redirect('/login');
}
req.session.user = user;
req.flash('success', '登入成功'); 6
res.redirect('/');
});
});
app.get('/logout', function(req, res) {
req.session.user = null; 7
req.flash('success', '登出成功');
res.redirect('/');
});
在这里你可以清晰地看出登入和登出仅仅是 req.session.user 变量的标记,非常简 8
单。但这会不会有安全性问题呢?不会的,因为这个变量只有服务端才能访问到,只要不是
黑客攻破了整个服务器,无法从外部改动。
最后我们创建 views/login.ejs,内容如下:
9
<form class="form-horizontal" method="post">
<fieldset>
<legend>用户登入</legend>
<div class="control-group">
<label class="control-label" for="username">用户名</label> 10