前言
我们完成了注册页面的功能设计,其它的功能设计也是这样,大同小异。
登出
完善登出的功能。修改 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') %>
待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。