基于Express的身份驗證中間件原理

Express基本原理一文中提到拇涤,Express的核心是中間件瘤袖,一切功能都是由中間件完成的掉缺。一個http請求從創(chuàng)建到結束卜录,會按順序經(jīng)過一系列中間件,一個中間件既可以修改req對象并通過調用next()將控制權交給下一個中間件眶明,也可以直接結束http請求艰毒。

Express順序執(zhí)行中間件這個特性決定了要實現(xiàn)身份驗證非常簡單,只需要讓需要驗證的請求先經(jīng)過身份驗證中間件搜囱,在身份驗證中間件中驗證用戶身份丑瞧,如果通過驗證則繼續(xù)調用后續(xù)實際處理請求的中間件,如果沒通過驗證則返回401等錯誤響應并終止請求蜀肘。

先來自己實現(xiàn)一個簡單的身份驗證中間件來深刻理解身份驗證中間件的原理绊汹,功能非常簡單,http headers中包含username并且password==='pwd'則說明當前用戶已登錄扮宠,通過身份驗證西乖,并把當前用戶的用戶名附加到req對象上;其它情況一律認為沒有通過身份驗證并返回錯誤代碼401,代碼如下:

var express = require('express')
var app = express()

function testAuthMiddleware(req, res, next) {
  var username = req.get('username')
  if (username && 'pwd' === req.get('password')) {
    req.user = username//身份驗證通過浴栽,把用戶信息附加到req對象上荒叼,以后執(zhí)行的中間件可以讀取。
    return next()
  }

  return res.sendStatus(401);
}

app.get('/', testAuthMiddleware, function (req, res) {
  res.send(`Hello, ${req.user}!`)
})//演示如何使用中間件典鸡,從第二個參數(shù)開始全部是中間件被廓,這些中間件順序執(zhí)行。
//首先執(zhí)行的就是我們剛才自定義的中間件萝玷,這個中間件如果通過了身份驗證嫁乘,下一個中間件就會執(zhí)行,如果沒通過球碉,調用res.sendStatus(401)返回錯誤并終止http請求蜓斧,后面的中間件不會被調用。

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

當然我們自己實現(xiàn)的這個中間件只是一個玩具睁冬,要在基于Express的web應用中使用身份驗證機制挎春,passport中間件幾乎是不二之選。下一篇文章將詳細介紹passport的原理與用法豆拨。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末直奋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子施禾,更是在濱河造成了極大的恐慌脚线,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弥搞,死亡現(xiàn)場離奇詭異邮绿,居然都是意外死亡,警方通過查閱死者的電腦和手機攀例,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門船逮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肛度,你說我怎么就攤上這事傻唾。” “怎么了承耿?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵冠骄,是天一觀的道長。 經(jīng)常有香客問我加袋,道長凛辣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任职烧,我火速辦了婚禮扁誓,結果婚禮上防泵,老公的妹妹穿的比我還像新娘。我一直安慰自己蝗敢,他們只是感情好捷泞,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寿谴,像睡著了一般锁右。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讶泰,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天咏瑟,我揣著相機與錄音,去河邊找鬼痪署。 笑死码泞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的狼犯。 我是一名探鬼主播余寥,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悯森!你這毒婦竟也來了劈狐?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呐馆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莲兢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汹来,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年改艇,在試婚紗的時候發(fā)現(xiàn)自己被綠了收班。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谒兄,死狀恐怖摔桦,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情承疲,我是刑警寧澤邻耕,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站燕鸽,受9級特大地震影響兄世,放射性物質發(fā)生泄漏。R本人自食惡果不足惜啊研,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一御滩、第九天 我趴在偏房一處隱蔽的房頂上張望鸥拧。 院中可真熱鬧,春花似錦削解、人聲如沸富弦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腕柜。三九已至,卻和暖如春柳爽,著一層夾襖步出監(jiān)牢的瞬間媳握,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工磷脯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛾找,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓赵誓,卻偏偏與公主長得像打毛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俩功,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容