国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Node登陸認證實戰!十分鐘手把手教會你!

開發 前端
在企業級開發中,Token 認證機制已成為保護 API 安全的行業標準。本文將演示如何通過 Node.js 生成 JSON Web Token (JWT),并結合 Redis 緩存實現完整的認證流程。

圖片圖片

零.前言 

在企業級開發中,Token 認證機制已成為保護 API 安全的行業標準。

本文將演示如何通過 Node.js 生成 JSON Web Token (JWT),并結合 Redis 緩存實現完整的認證流程。

一.安裝工具庫 

  • express:Express 的作用相當于 node.js 的內置模塊 http,是專門用來創建web服務器的。用來接收前端的請求。
  • jsonwebtoken:生成、校驗 token 的工具。
  • ioredis:緩存數據的工具,對 redis 插件進行封裝,集成 promise 等工具。
  • dotenv:用來管理本地環境變量。
  • mysql2:操作數據庫
  • sequelize:封裝數據庫操作,通過內置 api 而不是sql語句操作數據庫。
npm install express jsonwebtoken ioredis dotenv mysql2  sequelize

二.配置環境 

在項目根目錄新建 .env 文件

圖片圖片

在 app.js 中配置 dotenv

圖片圖片

require('dotenv').config();

然后我們就可以在項目中自定義的文件中獲取 .env 文件中配置的數據了,例如:

process.env.REDIS_PORT

三.配置 Redis 

圖片圖片

Redis 是一個高性能的鍵值存儲數據庫,常用于緩存、消息隊列、會話存儲等場景。

在 Node.js 中使用 Redis 可以顯著提升應用性能,尤其是在頻繁讀取數據的場景下。

如果你是前端小白,這里你就把 Redis 當成一個很牛逼的數據庫,可以存各式各樣的數據,可以給存儲的數據設置過期時間,時間一到就自動刪除了。

Redis 和 MySQL 數據庫一樣,分為服務端和客戶端。服務端用來存儲數據,客戶端用來對數據進行讀寫操作。

所以我們要先安裝服務端,再安裝客戶端。

安裝 Redis 服務端的文章大家可以自行搜索,或者去問 DeepSeek、豆包等大模型,這里不再贅述。

圖片圖片

而本文我們安裝的 ioredis 是一個 Node.js 環境下的 Redis 客戶端庫。我們可以通過它內置的 API 操作 Redis 數據庫中的數據。

3.1 配置 Redis

新建 config 文件夾,然后新建 redis.js 文件:

圖片圖片

將創建好的 Redis 配置文件加載到 app.js 中

圖片

四.jwt 生成 token 

古代調兵遣將需要兵符,這個兵符就是個憑證,憑證為真,兵部才允許你把兵調走。

同樣在系統開發中,只有是這個系統的用戶才被允許訪問一些資源。

1.前端用戶登陸成功之后,后臺通過一個工具將一段字符串返回給前端用戶。

2.前端用戶每次訪問其他頁面(資源)的時候請求頭都攜帶這個字符串。

3.后端拿到這個字符串之后再用工具去校驗,校驗通過,就允許訪問其他資源。

所以我們說的字符串就是 token,只不過這個字符串比較復雜。

而JWT是一種具體的 Token 實現方式,是一種認證解決方案。

你可以把 token 看做是 JWT。

而項目中我們安裝的 jsonwebtoken 是一個生成 token 字符串、校驗 token 的工具。比如它的生成 token 的方法:

jwt.sign(
    user,// Payload
    JWT_SECRET, // 秘鑰   
    { expiresIn: 3600000 } // 令牌過期時間(1小時)  
  );

所以 JWT 由三部分組成,用點號(.)分隔:

  • Header(頭部):包含令牌的類型和簽名算法。
  • Payload(載荷):包含聲明(Claims),即關于用戶或其他實體的信息。
  • Signature(簽名):用于驗證令牌的完整性和真實性。 一個典型的 JWT 看起來像這樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaGFuIEdvZGxleSIsImlhdCI6MTUxNjIzOTAzMCwiZXhwIjoxNTE2MjM5MDkwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

也就是使用 jsonwebtoken 庫的 sign 方法就能生成一個 token 字符串。

前面說了一堆廢話,接下來配置 jwt 工具:在 utils 文件夾在新建 jwt.js 文件

圖片圖片

在 app.js 文件中加載 jwt。

圖片圖片

注:jsonwebtoken 設置 token 過期時間有兩種方式:

1.數值,1h=60*60*1000=3600000

const token = jwt.sign(
    { id: user.id, },// Payload
    process.env.JWT_SECRET, // 秘鑰   
    { expiresIn: 3600000 }
  );

2.字符串: 1h表示1小時,2m表示2分鐘,24d表示24天

const token = jwt.sign(
    { id: user.id, },// Payload
    process.env.JWT_SECRET, // 秘鑰   
   { expiresIn: "1h" }
  );

五.改造用戶登陸接口 

核心流程:

1.獲取請求參數:username 和 password

2.使用 sequelize 的 findOne 方法查詢用戶信息。注:sequelize 工具的使用在前面幾篇文章講的有,這里不再贅述。

3.如果用戶不存在,返回錯誤信息。

4.用戶存在,密碼不對,返回錯誤信息

5.生成 token 信息

6.將token信息存儲到 redis,設置過期時間

7.將token返回給前端

// 用戶登陸
router.post('/login', async (req, res) => {
  try {
    const { username, password } = req.body;
    // 根據用戶名查詢用戶信息
    constuser = awaitUser.findOne({
      where: {
        username: username,
      }
    });
    // 用戶存在
    if (user) {
      // 校驗密碼
      if (password != user.password) {
        throw new CustomError("密碼錯誤!");
      }
      // 生成token
      consttoken = generateToken(user);
      // 將token存儲到Redis
      awaitredisClient.set(`token:${user.id}`, token, 'EX', 3600); // 1小時過期
      // 將token返回
      constresult = { token: token };
      success(res, "登錄成功", result);
    } else {
      throw new CustomError("用戶不存在!");
    }
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

注:redis 存儲數據的方法:

  • 參數1:key
  • 參數2:value
  • 參數3:固定,表示設置過期時間
  • 參數4:過期時間具體值,3600表示 1 小時,和jwt不一樣。
redisClient.set(key, value, 'EX', 過期時間)

測試結果:

密碼錯誤;

圖片圖片

登陸成功,返回 token 信息。

圖片

六.Token 身份校驗 

在 utils 文件夾下新建 auth.js 文件:

圖片圖片

核心流程:

1.從請求頭中獲取 token 信息,如果 token 不存在,就返回錯誤信息

2.使用 jsonwebtoken 庫的 verify 方法校驗 token 信息,校驗失敗返回錯誤信息

3.從Redis緩存中獲取 token 信息,如果 token 不存在,就返回錯誤信息

4.校驗成功,才能訪問其他資源

圖片圖片

然后在需要進行安全校驗的接口上面添加這個方法:

圖片圖片

測試:

1.header 為空

圖片圖片

2.token校驗失敗

圖片圖片

3.token校驗成功

圖片圖片

七.完整代碼 

通過網盤分享的文件:zhifou-mall-node-api.zip
鏈接: https://pan.baidu.com/s/10zOgKQiNfBIrppfAUk6lpw?pwd=6666 
提取碼: 6666

拿到代碼之后記得:

  • npm install 安裝依賴
  • 修改 Sequelize.js 里面連接 MySQL 數據庫的賬號密碼等配置項
  • 修改 .env 文件 redis 的配置信息
  • npm app.js 啟動后端項目
責任編輯:武曉燕 來源: 知否技術
相關推薦

2022-03-04 16:06:33

數據庫HarmonyOS鴻蒙

2023-07-15 18:26:51

LinuxABI

2020-12-17 06:48:21

SQLkafkaMySQL

2019-04-01 14:59:56

負載均衡服務器網絡

2023-03-13 07:52:13

2022-03-21 08:05:38

HTTP/1.1QUIC協議

2025-02-14 01:00:00

deepseek4jAPIJSON

2022-06-16 07:31:41

Web組件封裝HTML 標簽

2024-06-19 09:58:29

2021-09-07 09:40:20

Spark大數據引擎

2023-04-12 11:18:51

甘特圖前端

2015-09-06 09:22:24

框架搭建快速高效app

2024-05-13 09:28:43

Flink SQL大數據

2012-07-10 01:22:32

PythonPython教程

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫

2024-11-07 16:09:53

2019-09-16 09:14:51

2022-08-26 09:01:07

CSSFlex 布局

2009-10-09 14:45:29

VB程序

2015-11-06 11:03:36

點贊
收藏

51CTO技術棧公眾號

日韩在线免费高清视频| 久久99精品国产99久久6尤物| 亚洲欧美日韩国产成人综合一二三区 | 国产精品免费看一区二区三区| 99香蕉久久| 亚洲欧美精品在线| 国产高清一区二区三区视频| 狠狠躁夜夜躁人人躁婷婷91| 日韩五码在线观看| 久草在线在线精品观看| 国产伦精品一区二区| 国产一区网站| 欧美有码在线观看| 欧美激情15p| 国模精品系列视频| 精品伊人久久| 久久亚洲精品国产亚洲老地址| 欧美aaa视频| 亚洲天堂av综合网| 经典三级一区二区| 中文日韩在线观看| 综合欧美精品| 一区二区三区视频观看| 国产69精品久久久久按摩| 日韩av最新在线| 成av人片在线观看www| 日韩黄色av网站| 在线观看网站免费入口在线观看国内| 精品国产三级电影在线观看| 888av在线视频| 亚洲午夜国产成人av电影男同| 久久sese| 自拍偷拍亚洲精品| 免费观看亚洲天堂| 日本乱人伦a精品| 久久不见久久见中文字幕免费 | 日本大片在线播放| 日韩hd视频在线观看| 欧美国产日韩电影| 欧美激情视频三区| 青青草国产免费一区二区下载| 亚洲va电影大全| 亚洲欧美高清| 中文字幕免费在线不卡| 国产99久久久久久免费看农村| 国产精品wwwww| 一区二区三区鲁丝不卡| 在线播放你懂得| 日韩亚洲欧美成人一区| 欧美97人人模人人爽人人喊视频| 久久久久久成人精品| 国产精品88久久久久久| 免费av一区二区三区| 国产a视频精品免费观看| 国产高潮免费视频| 日韩欧美精品中文字幕| 69av成人| 久久久噜噜噜久噜久久| 欧美久久一级| 欧美性受xxxx黑人猛交88| 久久欧美中文字幕| 中文在线а√在线| 亚洲丁香久久久| 97一区二区国产好的精华液| 亚洲综合色av| 国产成人亚洲综合a∨猫咪| av男人的天堂网| 3d动漫精品啪啪1区2区免费| 亚洲成人高清| 91日韩久久| 99国产精品久久久久久久久久久| 国产剧情演绎av| 亚洲福利视频久久| 亚洲免费福利一区| 亚洲精蜜桃久在线| 亚洲免费av高清| 天堂资源在线| 国产精品爽黄69| 加勒比av一区二区| 美女的诞生在线观看高清免费完整版中文 | 国内精品亚洲| 欧美成人三级在线视频| 欧美性高跟鞋xxxxhd| 97久久香蕉国产线看观看| 国产精品人成电影在线观看| 玖玖在线精品| 国产激情二区| 亚洲欧美激情另类校园| 99久久.com| 99视频精品免费| 亚洲福利精品在线| 一区二区电影| 五月婷婷激情久久| 在线成人免费视频| 精品成人影院| 国产精品无码av在线播放| 欧美系列一区二区| 欧美电影在线观看免费| 999久久欧美人妻一区二区| 色综合中文字幕| 国语一区二区三区| 一区二区在线观看网站| 欧美日韩精品在线观看| 操欧美女人视频| 免费看污污视频| 欧美日韩精品三区| 免费精品国产的网站免费观看| 九色91av视频| 国产午夜亚洲精品午夜鲁丝片| 欧美久久高跟鞋激| 久久久久国产一区| 亚洲欧美一区二区三区四区| 日本亚洲天堂网| 成人性生交大片免费看在线播放| 精品亚洲第一| 亚洲第一免费播放区| 97se亚洲国产综合在线| 欧美先锋影音| 咪咪网在线视频| 久久久久久三级| 日韩在线观看免费高清| 欧美日韩在线免费观看| 成人av电影在线| 中文字幕中文字幕在线中心一区| 夜夜精品视频一区二区| 日本少妇一区| 性高潮久久久久久久久| 欧美在线视频日韩| 亚洲中无吗在线| 两个人看的免费完整在线观看| 欧美成人手机在线| 不卡视频免费播放| 欧美成人黄色| 日本aa在线观看| 亚洲精品福利在线| 欧美a级一区二区| 色操视频在线| 亚洲欧美日韩国产yyy| 777xxx欧美| 美女精品一区| 91九色在线看| 男女裸体影院高潮| 亚洲欧美日韩在线高清直播| 国产成人在线网站| 91视频亚洲| 性chinese极品按摩| 91精品成人久久| 亚洲妇女屁股眼交7| 欧美粗暴jizz性欧美20| 午夜激情视频在线观看| 精品久久久久久乱码天堂| 欧美精品乱码久久久久久按摩| 久久免费高清| 欧美成人精品三级网站| 看欧美ab黄色大片视频免费| 国产不卡在线观看| 欧美日韩性视频| 一本色道88久久加勒比精品| 青草在线视频| 2019日韩中文字幕mv| 米奇精品一区二区三区在线观看| 国产精品久久久久久久蜜臀| 欧美日韩黑人| 欧美成人hd| 欧美国产日韩激情| 4p变态网欧美系列| 欧美日韩国产另类一区| 国产精品一区二区三区网站| 亚洲不卡在线| 日本a一级在线免费播放| 视频一区二区三| 欧美成人亚洲成人| 色88888久久久久久影院野外| 老司机精品福利视频| **日韩最新| 九色在线观看| 妺妺窝人体色www看人体| 2018日韩中文字幕| 欧美日韩一二三| 韩国欧美国产一区| 欧美aaaaa级| 成人免费网址| www.天天射.com| 久久99精品久久久久久青青日本 | 免费高清在线观看免费| 91精品国产99| 欧美日韩在线三级| 成人av电影免费观看| 91精品一区国产高清在线gif| 日韩精品卡一| 日韩中文字幕a| 蜜桃臀一区二区三区| 欧美高清激情视频| 欧美一区二视频| 欧美激情中文字幕| 中日韩视频在线观看| 我要色综合中文字幕| 亚洲奶水xxxx哺乳期| 97影院在线观看| 国产欧美123|