導航:首頁 > 編程語言 > nodejs中間件

nodejs中間件

發布時間:2023-11-27 10:29:38

❶ Nodejs(Express框架)實現 Token 驗證免密登錄 (一)

看文章之前,強烈建議先把項目拉取下來!案例來自小弟的開源項目 「項目Github」

文章內容只是個人學習的一些總結經驗,不具有權威性,這是 Node 服務端的實現,後面會寫前端的實現

常見的 Token 驗證方式種:

推薦閱讀:

JWT 超詳細分析

說一說幾種常用的登錄認證方式,你用的哪種

推薦閱讀:

JSON Web Token 入門教程

JSON Web Token - 在Web應用間安全地傳遞信息

首先我們先安裝 jsonwebtoken 和 express-jwt 這兩個中間件

jsonwebtoken : 用於生成 Token 。它也有解析 Token 的功能

express-jwt : 用於解析 Token(比 jsonwebtoken 解決方便) , 它把解析之後的數據,存放到 requset.user 中

如果你看了上面 JWT 介紹的文章,就知道 JWT 是由三部分組成的,分別是 載荷(Payload) 、 頭部(Header) 、 簽名(Signature) 。

jsonwebtoken 給我們提供了 sign(payload, secretOrPrivateKey, [options, callback]) 方法。sign 方法對應的其實就是 JWT 簽名(Signature) 的動作

payload:荷載 ,參數類型:對象secretOrPrivateKey:自定義的密鑰,密鑰屬於敏感信息。參數類型:字元串options:可以配置 header 、荷載、指定演算法類型。參數類型:對象callback:回調

眼尖的朋友應該發現, payload 和 options 兩個 參數 都可以配置荷,下面有例子。根據自己的習慣選擇就好

Payload 部分 JWT 規定了7個官方欄位,這些欄位都是可選欄位。可直接以對象的形式傳給 payload 參數。

options 中也可以接受以上七個欄位,不過欄位名稱有所區別。

除此之後 options 提供了 algorithm 和 header ,分別對應使用的加密演算法和 JWT 的 Header 部分,其實 algorithm 應該也是屬於 Header 部分的。

說了這么多,其實我們一般常用的只有 exp(expiresIn) 和 algorithm 這兩個欄位,

例子一:

token 的有效時間是配置在 option 里

例子二:

我們也可以在 payload 里配置有效時間

jsonwebtoken 除了生成 token 外,還提供了解析驗證 token 的方法, jwt.verify(token, secretOrPublicKey, [options, callback]) 。

這里就不演示了, 感興趣的朋友可以參考文檔: 「JsonWebToken」

express-jwt 是針對 express 框架開發的 JWT Token 驗證中間件。我先來簡單說以下它的用法。

主要有兩種方式,一種是哪些請求需要驗證就往哪裡加驗證;另外一種是先給全部請求加上驗證,再給不需要驗證的請求配置 白名單 。

方式一:

看完上面的例子,很顯然不符合我們的逾期,一個正常的項目有個幾十個 api 是分分鍾的事。我們不可能一個個給他加上檢驗

方式二:

這種方式是不是方便很多,而且更美觀,維護起來也更方便

Token 解析出來的用戶信息,默認存放在 req.user , 可以直接 req.user.userId 來使用生成 Token 時填進去的用戶id

你也通過 requestProperty 和 resultProperty 來設置用戶信息存放的對象。

這里就不展開,詳細文檔參考: express-jwt

可以使用 app.use() 來注冊處理驗證不通過的情況

到這里 Token 的生成、驗證、檢驗不通過錯誤處理就完成了。 Token 生成一般是在登錄之後生成,並返回給前端,前端拿到 Token ,並在每次請求 api 的時候攜帶上 Token , Token 就相當於這個用戶的身份,不要輕易泄露。

Token一旦簽發,不能主動讓它失效,只能等待它有效期過才能失效。也就是說就算你修改了密碼,之前的 Token 也還是有效的。你可以修改後端生成 Token 時使用的密鑰,不讓之前的 Token 檢驗通過,但是這就表示之前所有生成 Token 都失效了,做不到針對某個用戶進行注銷。這顯然也不合適的。 所以用戶修改密碼時,前端一般都要清除之前保存的 Token,再重獲取新的 Token

有朋友應該會想到在後端把 Token 儲存起來,每一個用戶對應一個 token。修改賬號時,再生成一個新的 Token 覆蓋之前的 Token,但這就違背了使用 Token 的目的,Token 的使用很大程度就為了減少伺服器的壓力。把盡可能多的信息存儲在客戶端而不是服務端。

使用 Token 可以防禦 CSRF 攻擊,之前寫過一篇關於網路安全的文章,感興趣的朋友可以看一下 「XSS 攻擊、CSRF 攻擊、SQL 注入、流量劫持(DNS 劫持、HTTP 劫持)—— 瀏覽器安全」

❷ 什麼是中間件,nodejs的概念么跟插件,模塊有什麼區別

中間件就是不能獨立運行,需要依附一個平台或者系統才能使用的,類似於工具

❸ nodejs-koa2(mvc模式)前後端分離 前端設計

前後端分離,前端nodejs運行環境,使用koa2集成負責資源分配與用戶交互,實現token驗證用戶身份,路由控制。等!

自行 網路 解決;

"program": "${workspaceFolder}app.js"

此處就是是將app.js作為啟動文件。${workspaceFolder}代表根目錄,vsc啟動時會在根目錄下找到並載入app.js文件。

參數介紹: name 項目名稱、 version 版本號、 description 項目描述、 main 項目啟動文件、 scripts 啟動快捷設置, author 作者, dependencies 第3方中間件名稱及版本。

最重要的
dependencies 」這里添加一些要用到的包,以上是這次要用到的所有的包,版本自己更改。
scripts 」這里是一些nodejs的便捷命令,上線的時候會用到,直接在終端中,package.json同級目錄 ,執行『npm start』 即 可啟動app.js。
別的沒啥太大作用瞎寫即可。

啟動相關配置,封裝到config/init.js中,啟動文件直接引用即可

3-6-1、init.js項目核心。

異常友好處理方法封裝

路由配置

視圖渲染

核心集成

3-6-2、config.js項目參數配置。為什麼不用json文件 因為json不能加註釋

3-6-3、token.js項目token相關方法封裝。

執行後項目結構會增加兩個文件

新增

src/hello.js。

views/index.html

瀏覽器訪問: http://127.0.0.1:3000/koa/login

輸入值獲取token

獲取的token如圖:

先不用帶token進行訪問: http://127.0.0.1:3000/koa/ hello/jiaobaba,被token攔截,返回401

帶上token訪問: http://127.0.0.1:3000/koa/ hello/jiaobaba

測試頁面渲染,及跳轉html頁面,直接訪問 http://127.0.0.1:3000/koa /views

結束!!!!!!

需要源碼聯系我

❹ nodejs可以替代傳統tomcat嗎

你好
根據你的描述
完全可以的。 node.js 封裝了中間件,不需要tomcat那些了

閱讀全文

與nodejs中間件相關的資料

熱點內容
中間夾菜單裡面不能顯示壓縮文件 瀏覽:952
如何指導小學生參加編程比賽 瀏覽:275
物業的招標文件有哪些 瀏覽:452
保存游戲文件名非法或只讀 瀏覽:258
js怎麼做圖片時鍾 瀏覽:451
華為應用裡面有了app說明什麼 瀏覽:801
資料庫中xy是什麼意思 瀏覽:893
u盤打不開提示找不到應用程序 瀏覽:609
網站功能介紹怎麼寫 瀏覽:954
word在試圖打開文件時錯誤 瀏覽:108
主板無vga插槽怎麼連接編程器 瀏覽:521
錄視頻文件在哪裡刪除 瀏覽:881
word2013如何插入文件 瀏覽:233
proe教程百度網盤 瀏覽:197
如何控制遠程linux伺服器 瀏覽:740
it教學app有哪些 瀏覽:34
怎麼在ps摳的圖變成矢量文件 瀏覽:405
口袋妖怪銀魂安卓v11 瀏覽:1
網站上芒果tv的賬號都是什麼 瀏覽:104
帶公式的表格如何刷新數據 瀏覽:81

友情鏈接