91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jsonwebtoken如何生成與解析token

發布時間:2021-07-19 11:35:57 來源:億速云 閱讀:1053 作者:chen 欄目:大數據

這篇文章主要講解了“jsonwebtoken如何生成與解析token”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“jsonwebtoken如何生成與解析token”吧!

        之前寫了一篇介紹token的文章:簡單理解Token機制,token算法自己設計的,使用了隨機算法,導致token無法進行反向解密。所以我當初使用了redis進行存儲token,前端調用API時需要攜帶token進行身份驗證,token有效期48小時。但是我們有說過:sessionid是需要空間進行存儲的,但是token服務器是可以不需要存儲用戶信息的。所以我們能不能做到用戶注冊登陸成功給用戶生成一個token返回給客戶端,等前端攜帶token調用API時我們直接解析token看能否解析出用戶數據來決定用戶是否有接口權限呢?事實上NodeJS提供的一個npm包:jsonwebtoken就可以實現token的生成與反向解密出用戶數據。接下來我們看看jsonwentoken如何進行使用。

首先先全局安裝一個express-generator,命令為:

npm install -g express-generator

然后使用express-generator快速搭建一個express項目,命令為:

express express_demo

然后進入項目并且安裝express項目所需依賴,命令為:

cd express_demo && npm install

到這里項目搭建成功了,我們可以看看項目結構:

jsonwebtoken如何生成與解析token

首先在util下創建common.js,該文件主要放置常用公共方法,這里我目前只有兩個公共方法:paramAll(用來獲取前端傳來的參數),encryPassword(對密碼拼接字符串進行MD5加密)。

jsonwebtoken如何生成與解析token

可以看到第一行導入crypto依賴,MD5加密需要使用到這個包,所以我們先裝下這個依賴,命令為:

npm install --save-dev crypto

然后在util下創建bootloader.js,主要封裝幾個全局函數,用來輸出測試數據以及給前端返回數據使用。

jsonwebtoken如何生成與解析token

然后打開config.js,配置jsonwebtoken生成token所需的secretsecret為加密密鑰,不能泄露給其他人使用。

jsonwebtoken如何生成與解析token

接下來步入正軌了,我們一直說使用jsonwebtoken生成token,那當然我們首先安裝下jsonwebtoken,命令為:

npm install --save-dev jsonwebtoken

接下來我們來寫個接口是線下token的生成,我們接口實現在router下實現。首先打開router/users.js,在文件頂部先導入我們剛才編寫的幾個文件:

jsonwebtoken如何生成與解析token

接下來我們實現接口,將用戶的基本信息結合我們設置的密鑰secret通過jsonwebtoken生成token:

jsonwebtoken如何生成與解析token

通過我們剛才封裝的paramAll()進行過去前端的傳參,密碼是隱私數據所以通過封裝好的encryPassword()進行MD5加密。然后結合secret通過jsonwebtoken.sign(info, secret, options)進行加密生成token。我們來看下接口效果:

jsonwebtoken如何生成與解析token

可以看到我們成功將用戶信息轉化為token了,接下來我們來看看如何反向解析出用戶數據,解析token使用方法:

jsonwebtoken.verify(token, secret ,callback)

我們實現一個接口實現解析用戶token獲取用戶信息:

jsonwebtoken如何生成與解析token

這里需要注意的一點:如果token解析失敗或者token已經過期,則都會返回err,只有正確解析出用戶數據才會返回data。我們可以看下效果:

jsonwebtoken如何生成與解析token

可以看到我們成功把用戶數據解析出來,接下來我們可以看看在真正的API接口中我們如何去使用jsonwebtoken去進行token的解析使用。首先我們提到過了接口安全性一般要使用簽名,簽名規則還是依舊使用我一直使用的規則:

1.將接口所需參數加上當前時間戳參數time,time取毫秒值組裝成json對象。2.將所有參數以key=value的形式按照ASCII的順序進行排序得到waitSign。3.對waitSign進行MD5加密,得到signParam.4.將signParam轉化為純小寫,得到最終的簽名sign。

那接下來我們首先先把生成簽名的算法封裝成公共方法放到common.js中:

jsonwebtoken如何生成與解析token

API接口免不了數據庫操作,我們接下來封裝下數據庫操作。首先在config.js中配置數據庫配置信息:

jsonwebtoken如何生成與解析token

接下來在項目根目錄創建db文件夾,在db下創建mysql.js對數據庫的增刪改查操作進行封裝,先封裝連接池初始化以及連接池釋放方法:

jsonwebtoken如何生成與解析token

再封裝一個用戶插入更新數據,一個用于查詢數據:

jsonwebtoken如何生成與解析token

到這里數據庫我們也封裝好了,我們開始寫API實現用戶登陸,登陸成功生成token。我們看看實現的代碼:

jsonwebtoken如何生成與解析token

其實登陸邏輯可以分為三個步驟:

1.將參數按照解密規則加密生成簽名sign2.簽名驗證成功,數據庫驗證賬號密碼是否匹配3.賬號密碼匹配生成token與用戶信息一起返回給前端

我將數據庫操作封裝到dao層下的users.js下,我們看下登陸數據庫的邏輯代碼:

jsonwebtoken如何生成與解析token

到這里登陸邏輯完成了,我們看下接口的調用效果:

jsonwebtoken如何生成與解析token

調用成功,會生成一個token結合用戶信息一起返回給前端。我們再實現一個接口查詢用戶個人積分信息。前端調用API需要攜帶token進行驗證個人信息。

jsonwebtoken如何生成與解析token

本接口一樣分成三個步驟:

1.將參數按照解密規則加密生成簽名sign2.簽名驗證成功,解析token驗證解析后的用戶賬號與用戶傳參的賬號是否一致3.驗證成功進行數據庫操作查詢用戶的積分數據返回給前端

一樣我們把數據庫操作封裝在dao/users.js下,我們可以看下數據庫邏輯:

jsonwebtoken如何生成與解析token

我們看下接口調用效果:

jsonwebtoken如何生成與解析token

可以看到我們成功解析token獲得用戶信息,并查詢到用戶的積分信息。

        其實在公司前后端交互基本上我們也是采用簽名sign + token + timestamp的驗證方式。本篇文章也完成的重現了開發接口的整個流程,為了提高代碼可維護性,我們將一些公共方法全部進行了封裝,為后續的產品迭代增加了更多的可能性。

        本篇文章源碼以及上篇加解密算法源碼已上傳碼云,下載鏈接:

https://gitee.com/mqzuimeng/test_code.git

感謝各位的閱讀,以上就是“jsonwebtoken如何生成與解析token”的內容了,經過本文的學習后,相信大家對jsonwebtoken如何生成與解析token這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石首市| 洪泽县| 项城市| 太谷县| 灵石县| 瓮安县| 资讯| 襄樊市| 马边| 益阳市| 仁布县| 南昌市| 阳朔县| 宜良县| 金堂县| 峨边| 莎车县| 陈巴尔虎旗| 五大连池市| 扎兰屯市| 高安市| 博兴县| 镇江市| 育儿| 深水埗区| 合阳县| 福泉市| 枣阳市| 富锦市| 织金县| 利津县| 辽阳县| 揭阳市| 福州市| 陇南市| 麻城市| 元阳县| 杭州市| 武隆县| 海兴县| 怀远县|