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
   121   122   123   124   125   126   127   128   129   130   131