博客十一

作者: 我为峰2014 | 来源:发表于2017-12-17 20:11 被阅读0次

    前言

    我们完成了注册页面的功能设计,其它的功能设计也是这样,大同小异。

    登出

    完善登出的功能。修改 routes/signout.js 如下:

    routes/signout.js

    const express = require('express')
    const router = express.Router()
    
    const checkLogin = require('../middlewares/check').checkLogin
    
    // GET /signout 登出
    router.get('/', checkLogin, function (req, res, next) {
      // 清空 session 中用户信息
      req.session.user = null
      req.flash('success', '登出成功')
      // 登出成功后跳转到主页
      res.redirect('/posts')
    })
    
    module.exports = router
    

    登录

    来完善登录页。修改 routes/signin.js 相应代码如下:

    routes/signin.js

    const sha1 = require('sha1')
    const express = require('express')
    const router = express.Router()
    
    const UserModel = require('../models/users')
    const checkNotLogin = require('../middlewares/check').checkNotLogin
    
    // GET /signin 登录页
    router.get('/', checkNotLogin, function (req, res, next) {
      res.render('signin')
    })
    
    // POST /signin 用户登录
    router.post('/', checkNotLogin, function (req, res, next) {
      const name = req.fields.name
      const password = req.fields.password
    
      // 校验参数
      try {
        if (!name.length) {
          throw new Error('请填写用户名')
        }
        if (!password.length) {
          throw new Error('请填写密码')
        }
      } catch (e) {
        req.flash('error', e.message)
        return res.redirect('back')
      }
    
      UserModel.getUserByName(name)
        .then(function (user) {
          if (!user) {
            req.flash('error', '用户不存在')
            return res.redirect('back')
          }
          // 检查密码是否匹配
          if (sha1(password) !== user.password) {
            req.flash('error', '用户名或密码错误')
            return res.redirect('back')
          }
          req.flash('success', '登录成功')
          // 用户信息写入 session
          delete user.password
          req.session.user = user
          // 跳转到主页
          res.redirect('/posts')
        })
        .catch(next)
    })
    
    module.exports = router
    

    这里我们在 POST /signin 的路由中处理函数,通过传上来的 name 去数据库中找到对应用户,校验传上来的密码是否跟数据库中的一致。不一致则返回上一页(即登录页)并显示『用户名或密码错误』的通知,一致则将用户信息写入 session,跳转到主页并显示『登录成功』的通知。

    新建 views/signin.ejs,添加如下代码:

    views/signin.ejs

    <%- include('header') %>
    
    <div class="ui grid">
      <div class="four wide column"></div>
      <div class="eight wide column">
        <form class="ui form segment" method="post">
          <div class="field required">
            <label>用户名</label>
            <input placeholder="用户名" type="text" name="name">
          </div>
          <div class="field required">
            <label>密码</label>
            <input placeholder="密码" type="password" name="password">
          </div>
          <input type="submit" class="ui button fluid" value="登录">
        </form>  
      </div>
    </div>
    
    <%- include('footer') %>
    

    待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    相关文章

      网友评论

        本文标题:博客十一

        本文链接:https://www.haomeiwen.com/subject/dyruwxtx.html