前言
我們完成了注冊頁面的功能設(shè)計,其它的功能設(shè)計也是這樣,大同小異。
登出
完善登出的功能。修改 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', '登出成功')
// 登出成功后跳轉(zhuǎn)到主頁
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
// 校驗參數(shù)
try {
if (!name.length) {
throw new Error('請?zhí)顚懹脩裘?)
}
if (!password.length) {
throw new Error('請?zhí)顚懨艽a')
}
} 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
// 跳轉(zhuǎn)到主頁
res.redirect('/posts')
})
.catch(next)
})
module.exports = router
這里我們在 POST /signin 的路由中處理函數(shù),通過傳上來的 name 去數(shù)據(jù)庫中找到對應用戶,校驗傳上來的密碼是否跟數(shù)據(jù)庫中的一致。不一致則返回上一頁(即登錄頁)并顯示『用戶名或密碼錯誤』的通知,一致則將用戶信息寫入 session,跳轉(zhuǎn)到主頁并顯示『登錄成功』的通知。
新建 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') %>
待續(xù)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。