認證功能-權限、登出功能(不包含登出按鈕)

設定 auth middleware,在所有路由上增加認證功能,不管做任何 post、 put、delete 動作都需要 auth 認證。

auth 即為 認證(authentication)

步驟

  1. 新增 auth.js 檔案在 config 資料夾。
  2. 將邏輯加入路由器,收到請求時檢查使用者權限。

新增 auth.js

撰寫 auth middleware,方法名稱為 authenticated ,用來檢查 req 物件中 isAuthenticated 的 value。 如果 isAuthenticated is true. 執行下一個否則就回到login 頁面。

config/auth.js

module.exports = {
authenticated: (req, res, next) => {
if (req.isAuthenticated()) {
return next()
}
res.redirect('/users/login')
}
}

修改路由

在 router.ger(‘/‘ 後面加入 authenticated 的 option。

routes/home.js

const express = require('express')
const router = express.Router()
const Todo = require('../models/todo')

// 載入在 config/auth.js 中的 authenticated 方法
const { authenticated } = require('../config/auth.js')

// 首頁路由 加入驗證
router.get('/', authenticated, (req, res) => {
Todo.find({})
.sort({name: 'asc'})
.exec((err, todos) => {
if (err) return console.error(err)
return res.render('index', { todo: todos })
})
})
module.exports = router

試驗首頁可以後就加其加入其他的路由中。

登出

先進入router/user.js,修改登出路由,邏輯如下,當接收到使用者點擊登出按鈕時,將執行 Passport 所提供的 req.logout() 函數清除session,將使用者帶回登入頁面。

router.get('/logout', (req,res) => {
req.logout()
res.redirect('/users/login')
})