使用egg.js中間件驗(yàn)證用戶請(qǐng)求
中間件在計(jì)算機(jī)軟件系統(tǒng)應(yīng)用中用途非常廣泛,一般用來(lái)攔截請(qǐng)求,從而進(jìn)行前置或者后置處理,例如安全校驗(yàn)、合法請(qǐng)求判斷和用戶身份驗(yàn)證等。本文將演示如何在egg.js框架中使用中間件來(lái)驗(yàn)證用戶的請(qǐng)求是否正確。
中間件在計(jì)算機(jī)軟件系統(tǒng)應(yīng)用中用途非常廣泛,一般用來(lái)攔截請(qǐng)求,從而進(jìn)行前置或者后置處理,例如安全校驗(yàn)、合法請(qǐng)求判斷和用戶身份驗(yàn)證等。本文將演示如何在egg.js框架中使用中間件來(lái)驗(yàn)證用戶的請(qǐng)求是否正確。
編寫(xiě)user方法并通過(guò)中間件驗(yàn)證請(qǐng)求
在編寫(xiě)user方法時(shí),我們可以通過(guò)中間件來(lái)驗(yàn)證請(qǐng)求是否合法。以下是一個(gè)示例代碼:
// app/controller/home.js
'use strict';
const { Controller } require('egg');
class HomeController extends Controller {
async index() {
const { ctx } this;
'hi, eggjs!';
}
// 用戶個(gè)人中心
async user() {
const { ctx } this;
'hi, welcome user center!';
}
}
module.exports HomeController;
編寫(xiě)check中間件
接下來(lái),我們需要編寫(xiě)一個(gè)名為check的中間件來(lái)檢查請(qǐng)求的合法性。以下是示例代碼:
// app/middleware/check.js
'use strict';
module.exports options gt; {
return async function check(ctx, next) {
// 獲取url傳來(lái)的token參數(shù)
const token ;
const sys_token 'test'; // 假設(shè)系統(tǒng)存儲(chǔ)的token
// 判斷token是否合法
if(sys_token ! token) {
401;
return { code: 'error', msg: 'token無(wú)效' };
}
// 放行
await next();
}
}
引入中間件并設(shè)置路由
在路由中,我們需要引入check中間件,并使用它來(lái)驗(yàn)證請(qǐng)求的合法性。以下是示例代碼:
// app/router.js
'use strict';
/
* @param {} app - egg application
*/
module.exports app gt; {
const { router, controller } app;
// 中間件
const ck ();
('/index', );
// 訪問(wèn)用戶中心,中間件驗(yàn)證token是否合法
('/userinfo', ck, );
}
現(xiàn)在,可以啟動(dòng)項(xiàng)目并測(cè)試中間件的功能了。
啟動(dòng)項(xiàng)目
打開(kāi)命令終端,切換至項(xiàng)目根目錄,并執(zhí)行以下命令啟動(dòng)項(xiàng)目:
npm run dev
驗(yàn)證中間件
打開(kāi)瀏覽器,在地址欄輸入以下URL進(jìn)行中間件驗(yàn)證的測(cè)試:
- 錯(cuò)誤的token:http://127.0.0.1:7001/userinfo?tokentt2023
- 正確的token:http://127.0.0.1:7001/userinfo?tokentest
根據(jù)測(cè)試結(jié)果,如果token無(wú)效,則會(huì)提示"token無(wú)效";而如果token有效,則成功進(jìn)入個(gè)人中心頁(yè)面。通過(guò)封裝業(yè)務(wù)邏輯成中間件的方式,可以使代碼更簡(jiǎn)潔且具有更強(qiáng)的擴(kuò)展性。