国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫與身份認(rèn)證

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)庫與身份認(rèn)證。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、目標(biāo)

  • 能夠知道如何配置MySQL數(shù)據(jù)庫環(huán)境
  • 能夠認(rèn)識并使用常見的SQL語句操作數(shù)據(jù)庫
  • 能夠在Express中操作MySQL數(shù)據(jù)庫
  • 能夠了解Session的實(shí)現(xiàn)原理
  • 能夠了解JWT的實(shí)現(xiàn)原理

二、目錄

  1. 數(shù)據(jù)庫的概念
  2. 安裝并配置MySQL
  3. MySQL的基本使用
  4. 在Express中操作MySQL
  5. 前后端的身份認(rèn)證

1.數(shù)據(jù)庫的基本概念

1.1什么是數(shù)據(jù)庫

數(shù)據(jù)庫(database)是用來阻止、存儲和管理數(shù)據(jù)的倉庫。

為了方便管理互聯(lián)網(wǎng)世界中的數(shù)據(jù),就有了數(shù)據(jù)庫管理系統(tǒng)的概念。用戶可以對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作。

1.2常見的數(shù)據(jù)庫及分類

  • MySQL數(shù)據(jù)庫(目前使用最廣泛、流行度最高的開源免費(fèi)數(shù)據(jù)庫;Community+Enterprise)
  • Oracle數(shù)據(jù)庫(收費(fèi))
  • SQL Server數(shù)據(jù)庫(收費(fèi))
  • Mongodb數(shù)據(jù)庫(Community+Enterprise)

其中,MySQL、Oracle、SQL Server屬于傳統(tǒng)型數(shù)據(jù)庫(又叫做:關(guān)系型數(shù)據(jù)庫或SQL數(shù)據(jù)庫),這三者的設(shè)計(jì)理念相同,用法比較類似

而Mongodlb屬于新型數(shù)據(jù)庫(又叫做:非關(guān)系型數(shù)據(jù)庫或NoSQL數(shù)據(jù)庫),它在一定程度上彌補(bǔ)了傳統(tǒng)型數(shù)據(jù)庫的缺陷

1.3傳統(tǒng)型數(shù)據(jù)庫的數(shù)據(jù)組織結(jié)構(gòu)

數(shù)據(jù)庫與身份認(rèn)證

?1.Excel的數(shù)據(jù)組織結(jié)構(gòu)

數(shù)據(jù)庫與身份認(rèn)證

2.傳統(tǒng)型數(shù)據(jù)庫的數(shù)據(jù)組織結(jié)構(gòu)

數(shù)據(jù)庫與身份認(rèn)證

?3.實(shí)際開發(fā)中庫、表、行、字段的關(guān)系

數(shù)據(jù)庫與身份認(rèn)證

?2.安裝并配置MySQL

2.1了解需要安裝哪些MySQL相關(guān)的軟件

數(shù)據(jù)庫與身份認(rèn)證

?2.2MySQL在Windows環(huán)境下的安裝

在windows環(huán)境下安裝MySQL,只需要運(yùn)行mysql-installer-community-8.0.19.0.msi這個(gè)安裝包,就能一次性將MySQL Server和MySQL Workbench安裝到自己的電腦上。

3、MySQL的基本使用

3.1使用MySQL Workbench管理數(shù)據(jù)庫

1.鏈接數(shù)據(jù)庫

數(shù)據(jù)庫與身份認(rèn)證

2.了解主界面的組成部分

數(shù)據(jù)庫與身份認(rèn)證

?3.創(chuàng)建數(shù)據(jù)庫

數(shù)據(jù)庫與身份認(rèn)證

?4.創(chuàng)建數(shù)據(jù)表

數(shù)據(jù)庫與身份認(rèn)證

DataType數(shù)據(jù)類型:

int整數(shù)

varcharlen)字符串

tinyint1)布爾值

字段的特殊標(biāo)識:

PK(Primary Key)主鍵、唯一標(biāo)識

NN(Not Null)值不允許為空

UQ(Unique)值唯一

AI(Auto Increment)值自動增長

⑤default默認(rèn)填寫的值:當(dāng)你輸入數(shù)據(jù)是不填寫,就自動給你填寫上

5.向表中寫入數(shù)據(jù)

數(shù)據(jù)庫與身份認(rèn)證

?3.2使用SQL管理數(shù)據(jù)庫

1.什么是SQL

SQL(Structured Query Language)是結(jié)構(gòu)化查詢語言,專門用來訪問和處理數(shù)據(jù)庫的編程語言。能夠讓我們以編程的形式,操作數(shù)據(jù)庫里面的數(shù)據(jù)。

三個(gè)關(guān)鍵點(diǎn):

1.SQL是一門數(shù)據(jù)庫編程語言

2.使用SQK語言編寫出來的代碼,叫做SQL語句

3.SQL語言只能在關(guān)系型數(shù)據(jù)庫中使用(例如MySQL、Oracle、SQL Server)。非關(guān)系型數(shù)據(jù)庫(例如MOngodb)不支持SQL語言

2.SQL能做什么

數(shù)據(jù)庫與身份認(rèn)證

?數(shù)據(jù)庫與身份認(rèn)證

?3.3SQL的select語句

1.語法

數(shù)據(jù)庫與身份認(rèn)證

?注意:select中字母大小寫不影響

3.4SQL的INSERT INTO語句

1.語法

數(shù)據(jù)庫與身份認(rèn)證

?2.示例

數(shù)據(jù)庫與身份認(rèn)證

3.5SQL的UPDATA語句

1.語法

數(shù)據(jù)庫與身份認(rèn)證數(shù)據(jù)庫與身份認(rèn)證

?3.6SQL的DELETE語句

1.語法

數(shù)據(jù)庫與身份認(rèn)證

?2.示例

數(shù)據(jù)庫與身份認(rèn)證

?3.7SQL的WHERE子句

1.語法

數(shù)據(jù)庫與身份認(rèn)證

2.可以在WHERE子句中使用的運(yùn)算符

數(shù)據(jù)庫與身份認(rèn)證3.SQL的where 子句示例

數(shù)據(jù)庫與身份認(rèn)證

?3.8SQL的AND和OR運(yùn)算符

1.語法

數(shù)據(jù)庫與身份認(rèn)證

?3.9SQL的ORDER BY子句

1.語法

數(shù)據(jù)庫與身份認(rèn)證

數(shù)據(jù)庫與身份認(rèn)證

數(shù)據(jù)庫與身份認(rèn)證

?4.ORDER BY子句-多重排序

數(shù)據(jù)庫與身份認(rèn)證

?3.10SQL的COUNT(*)函數(shù)

1.語法

數(shù)據(jù)庫與身份認(rèn)證數(shù)據(jù)庫與身份認(rèn)證

?2.使用as關(guān)鍵字

數(shù)據(jù)庫與身份認(rèn)證

?4.在項(xiàng)目中操作MySQL

4.1在項(xiàng)目中操作數(shù)據(jù)庫的步驟

?①安裝操作MySQL數(shù)據(jù)庫的第三方模塊(mysql

②通過mysql模塊連接到MySQL數(shù)據(jù)庫

③通過mysql模塊執(zhí)行SQL語句

數(shù)據(jù)庫與身份認(rèn)證

?4.2安裝與配置mysql模塊

1.安裝mysql模塊

mysql模塊是托管與npm上的第三方模塊。它提供了在Node.js項(xiàng)目中鏈接操作MySQL數(shù)據(jù)庫的能力。想要在項(xiàng)目中使用它,需要先運(yùn)行如下命令,將mysql安裝為項(xiàng)目的依賴包:

數(shù)據(jù)庫與身份認(rèn)證

?2.配置mysql模塊

在使用mysql模塊操作MySQL數(shù)據(jù)庫之前,必須先對mysql模塊進(jìn)行必要的配置,主要的配置步驟如下:

數(shù)據(jù)庫與身份認(rèn)證

//1.導(dǎo)入mysql模塊
const mysql = require('mysql');
//2.建立數(shù)據(jù)庫鏈接
const db = mysql.createPool({
    host: "127.0.0.1", //數(shù)據(jù)庫的ip地址
    user: "root", //登錄數(shù)據(jù)庫的賬號
    password: "admin123", //登錄數(shù)據(jù)庫的密碼
    database: 'my_db_01' //指定要操作哪個(gè)數(shù)據(jù)庫
})

?3.測試mysql模塊能否正常工作

調(diào)用db.query()函數(shù),指定要執(zhí)行的SQL語句,通過回調(diào)函數(shù)拿到執(zhí)行的結(jié)果:

數(shù)據(jù)庫與身份認(rèn)證

//1.導(dǎo)入mysql模塊
const mysql = require('mysql');
//2.建立數(shù)據(jù)庫鏈接
const db = mysql.createPool({
        host: "127.0.0.1", //數(shù)據(jù)庫的ip地址
        user: "root", //登錄數(shù)據(jù)庫的賬號
        password: "admin123", //登錄數(shù)據(jù)庫的密碼
        database: 'my_db_01' //指定要操作哪個(gè)數(shù)據(jù)庫
    })
    //測試mysql模塊能否正常工作
db.query('select 1', (err, results) => {
    //mysql模塊工作期間報(bào)錯(cuò)了
    if (err) return console.log(err.message);
    //能夠成功的執(zhí)行SQL語句
    console.log(results)
})

4.3使用mysql模塊操作MySQL數(shù)據(jù)庫

1.查詢數(shù)據(jù)

數(shù)據(jù)庫與身份認(rèn)證

const sqlStr = 'select * from my_db_01.users'
db.query(sqlStr, (err, results) => {
    //查詢數(shù)據(jù)失敗
    if (err) return console.log(err.message);
    //查詢數(shù)據(jù)成功
    //注意:如果執(zhí)行的是select查詢語句,則執(zhí)行的結(jié)果是數(shù)組
    console.log(results)
})

2.插入數(shù)據(jù)

向users表中新增數(shù)據(jù),其中usernameSpider-Man,passwordpcc321.示例代碼如下:

數(shù)據(jù)庫與身份認(rèn)證

?3.插入數(shù)據(jù)的便捷方式

向表中新增數(shù)據(jù)時(shí),如果數(shù)據(jù)對象的每個(gè)屬性數(shù)據(jù)表的字段一一對應(yīng),則可以通過如下方式快速插入數(shù)據(jù):

數(shù)據(jù)庫與身份認(rèn)證

?4.更新數(shù)據(jù)

數(shù)據(jù)庫與身份認(rèn)證

?5.更新數(shù)據(jù)的便捷方式

數(shù)據(jù)庫與身份認(rèn)證

6.刪除數(shù)據(jù)

在刪除數(shù)據(jù)時(shí),推薦根據(jù)id這樣的唯一標(biāo)識,來刪除對應(yīng)的數(shù)據(jù)。示例如下:

數(shù)據(jù)庫與身份認(rèn)證

//1.導(dǎo)入mysql模塊
const mysql = require('mysql');
//2.建立數(shù)據(jù)庫鏈接
const db = mysql.createPool({
        host: "127.0.0.1", //數(shù)據(jù)庫的ip地址
        user: "root", //登錄數(shù)據(jù)庫的賬號
        password: "admin123", //登錄數(shù)據(jù)庫的密碼
        database: 'my_db_01' //指定要操作哪個(gè)數(shù)據(jù)庫
    })
  //刪除id為5的用戶
const sqlStr = 'delete from users where id=?'
db.query(sqlStr, 1, (err, results) => {
    if (err) return console.log(err.message)
        //注意:執(zhí)行delete之后,結(jié)果也是一個(gè)對象,也會包含affectedRows屬性
    if (results.affectedRows === 1) {
        console.log('刪除數(shù)據(jù)成功')
    }
})

?7.標(biāo)記刪除

使用DELETE語句,會真正的把數(shù)據(jù)從表中刪除掉。為了保險(xiǎn)起見,推薦使用標(biāo)記刪除的形式,來模擬刪除的動作。

所謂的標(biāo)記刪除,就是在表中設(shè)置類似于status這樣的狀態(tài)字段,來標(biāo)記當(dāng)前這條數(shù)據(jù)是否被刪除。

當(dāng)用戶執(zhí)行了刪除的動作時(shí),我們并沒有執(zhí)行DELETE語句把數(shù)據(jù)刪除掉,而是執(zhí)行了UPDATE語句,將這條數(shù)據(jù)對應(yīng)的status字段標(biāo)記為刪除即可。

數(shù)據(jù)庫與身份認(rèn)證

//1.導(dǎo)入mysql模塊
const mysql = require('mysql');
//2.建立數(shù)據(jù)庫鏈接
const db = mysql.createPool({
        host: "127.0.0.1", //數(shù)據(jù)庫的ip地址
        user: "root", //登錄數(shù)據(jù)庫的賬號
        password: "admin123", //登錄數(shù)據(jù)庫的密碼
        database: 'my_db_01' //指定要操作哪個(gè)數(shù)據(jù)庫
    })
const sqlStr = 'update users set status=? where id=?'
db.query(sqlStr, [1, 4], (err, results) => {
    if (err) return console.log(err.message)
        //注意:執(zhí)行delete之后,結(jié)果也是一個(gè)對象,也會包含affectedRows屬性
    if (results.affectedRows === 1) {
        console.log('刪除數(shù)據(jù)成功')
    }
})

5.前后端身份認(rèn)證

5.1Web開發(fā)模式

目前主流的Web開發(fā)模式有兩種,分別是:

①基于服務(wù)器渲染的傳統(tǒng)Web開發(fā)模式

②基于前后端分離的新型Web開發(fā)模式

1.服務(wù)器渲染的Web開發(fā)模式

服務(wù)器渲染的概念:服務(wù)器發(fā)送給客戶端的HTML頁面,是在服務(wù)器通過字符串的拼接,動態(tài)生成的。因此,客戶端不需要使用Ajax這樣的即使額外請求頁面的數(shù)據(jù)。示例代碼如下:

數(shù)據(jù)庫與身份認(rèn)證

?2.服務(wù)器渲染的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

前端耗時(shí)少。因?yàn)榉?wù)器端負(fù)責(zé)動態(tài)生成HTML內(nèi)容,瀏覽器只需要直接渲染頁面即可。尤其是移動端,更省電。

有利于SEO。因?yàn)榉?wù)器響應(yīng)的是完整的HTML頁面內(nèi)容,所以爬蟲更容易爬取獲得信息,更有利于SEO。

缺點(diǎn):

占用服務(wù)器資源。即服務(wù)器端完成HTML頁面內(nèi)容的拼接,如果請求較多,會對服務(wù)器造成一定的訪問壓力。

不利于前后端分離,開發(fā)效率低。使用服務(wù)器端渲染,則無法進(jìn)行分工合作,尤其對于前端復(fù)雜度高的項(xiàng)目,不利于項(xiàng)目高效開發(fā)。

3.前后端分離的Web開發(fā)模式

前后端分離的概念:前后端分離的開發(fā)模式,依賴于Ajax技術(shù)的廣泛應(yīng)用。簡而言之,前后端分離的Web開發(fā)模式,就是后端只負(fù)責(zé)提供API接口,前端使用Ajax調(diào)用接口的開發(fā)模式。

4.前后端分離的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

開發(fā)體驗(yàn)好。前端專注于UI頁面的開發(fā),后端專注于api的開發(fā),且前端有更多的選擇性。

用戶體驗(yàn)好。Ajax技術(shù)的廣泛應(yīng)用,極大地提高了用戶的體驗(yàn),可以輕松實(shí)現(xiàn)頁面的局部刷新。

減輕了服務(wù)器端的渲染壓力。因?yàn)轫撁孀罱K是在每個(gè)用戶的瀏覽器中生成的。

缺點(diǎn):

不利于SEO。因?yàn)橥暾腍TML頁面需要在客戶端動態(tài)拼接完成,所以爬蟲對無法爬取頁面的有效信息。(解決方案:利用Vue、React等前端框架的ssr(server side render)技術(shù)能夠很好的解決SEO問題?。?/p>

5.如何選擇Web開發(fā)模式

不談業(yè)務(wù)場景而盲目選擇使用何種開發(fā)模式都是耍流氓

  • 比如企業(yè)級網(wǎng)站,主要功能是展示而沒有復(fù)雜的交互,并且需要良好的SEO,則這時(shí)我們就需要使用服務(wù)器端渲染;
  • 而類似后臺管理項(xiàng)目,交互性比較強(qiáng)不需要考慮SEO,那么就可以使用前后端分離的開發(fā)模式。

另外,具體使用何種開發(fā)模式并不是絕對的,為了同時(shí)兼顧了首頁的渲染速度和前后端分離的開發(fā)效率,一些網(wǎng)站采用了首屏服務(wù)器端渲染+其他頁面前后端分離的開發(fā)模式。

5.2身份認(rèn)證

1.什么是身份認(rèn)證

身份認(rèn)證(Authentication)又稱“身份認(rèn)證”、“鑒權(quán)”,是通過一定的手段,完成對用戶身份的確認(rèn)。

  • 在Web開發(fā)中,也涉及到用戶身份的認(rèn)證,例如:各大網(wǎng)站的手機(jī)驗(yàn)證碼登錄、郵箱密碼登錄、二維碼登錄等等。

2.為什么需要身份認(rèn)證

身份認(rèn)證的目的,是為了確認(rèn)當(dāng)前所聲稱為某種身份的用戶,確實(shí)是所聲稱的用戶。例如,你去找快遞員取快遞,你要怎么證明這份快遞是你的。

3.不同開發(fā)模式下的身份認(rèn)證

對于服務(wù)器渲染和前后端這兩種開發(fā)模式來說,分別有著不同的身份認(rèn)證方案:

服務(wù)器渲染推薦使用Session認(rèn)證機(jī)制

前后端分離推薦使用JWT認(rèn)證機(jī)制。

5.3Session認(rèn)證機(jī)制

1.HTTP協(xié)議的無狀態(tài)性

了解HTTP協(xié)議的無狀態(tài)性是進(jìn)一步學(xué)習(xí)Session認(rèn)證機(jī)制的必要前提。

HTTP協(xié)議的無狀態(tài)性,指的是客戶端的每次HTTP請求都是獨(dú)立的,連續(xù)多個(gè)請求之間沒有直接的關(guān)系,服務(wù)器不會主動保留每次HTTP請求的狀態(tài)。

數(shù)據(jù)庫與身份認(rèn)證

?2.如何突破HTTP無狀態(tài)的限制

對于超市來說,為了方便收銀員在進(jìn)行結(jié)算時(shí)給VIP用戶打折,超市可以為每個(gè)VIP用戶發(fā)放會員卡。

數(shù)據(jù)庫與身份認(rèn)證

?注意:現(xiàn)實(shí)生活中的會員卡身份認(rèn)證方式,在web開發(fā)中的專業(yè)術(shù)語叫做Cookie.

3.什么是Cookie

Cookie是存儲在用戶瀏覽器中的一段不超過4KB的字符串。它由一個(gè)名稱(Name)、一個(gè)(Value)和其他幾個(gè)用于控制Cookie有效期、安全性、使用范圍可選屬性組成。

不同域名下的Cookie各自獨(dú)立,每當(dāng)客戶端發(fā)起請求時(shí),會自動當(dāng)前域名下所有未過期的Cookie一同發(fā)送到服務(wù)器。

Cookie的幾大特性:

①自動發(fā)送

②域名獨(dú)立

③過期時(shí)限

④4KB限制

?4.Cookie在身份認(rèn)證中的作用

客戶端第一次請求服務(wù)器的時(shí)候,服務(wù)器通過響應(yīng)頭的形式,向客戶端發(fā)送一個(gè)身份認(rèn)證的Cookie,客戶端會自動將Cookie保存在瀏覽器中。

隨后,當(dāng)客戶端瀏覽器每次請求服務(wù)器的時(shí)候,瀏覽器會自動將身份認(rèn)證相關(guān)的Cookie,通過請求頭的形式發(fā)送給服務(wù)器,服務(wù)器即可驗(yàn)明客戶端的身份。

數(shù)據(jù)庫與身份認(rèn)證

5.Cookie不具有安全性

由于 Cookie是存儲在瀏覽器中的,而且瀏覽器也提供了讀寫Cookie的API,因此Cookie很容易被偽造,不具有安全性。因此不建議服務(wù)器將重要的隱私數(shù)據(jù),通過Cookie的形式發(fā)送給瀏覽器。

數(shù)據(jù)庫與身份認(rèn)證

?6.提高身份認(rèn)證的安全性

為了防止客戶偽造會員卡,收銀員在拿到客戶出示的會員卡之后,可以在收銀機(jī)上進(jìn)行刷卡認(rèn)證,只有收銀機(jī)確認(rèn)存在的會員卡,才能使用。

數(shù)據(jù)庫與身份認(rèn)證

這種“會員卡+刷卡認(rèn)證”的設(shè)計(jì)理念,就是Session認(rèn)證機(jī)制的精髓。?

7.Session的工作原理

數(shù)據(jù)庫與身份認(rèn)證

5.4在Express中使用Session認(rèn)證

1.express-session中間件

在Express項(xiàng)目中,只需要安裝express-session中間件,即可在項(xiàng)目中使用Session認(rèn)證:

數(shù)據(jù)庫與身份認(rèn)證

2.配置express-session中間件

express-session中間件安裝成功后,需要通過app.use()注冊session中間件,示例代碼如下:

數(shù)據(jù)庫與身份認(rèn)證

3.向session中存數(shù)據(jù)

當(dāng)express-session中間件配置成功后,即可通過req.session來訪問和使用session對象,從而存儲用戶的關(guān)鍵信息:

數(shù)據(jù)庫與身份認(rèn)證

?4.從session中取數(shù)據(jù)

可以直接從req.session對象上獲取之前存儲的數(shù)據(jù),示例代碼如下:

數(shù)據(jù)庫與身份認(rèn)證

5.清空session

調(diào)用req.session.destory()函數(shù),即可清空服務(wù)器保存的session信息。

數(shù)據(jù)庫與身份認(rèn)證

5.5JWT認(rèn)證機(jī)制

1.了解Session認(rèn)證的局限性

Session認(rèn)證機(jī)制需要配合Cookie才能實(shí)現(xiàn)。由于Cookie默認(rèn)不支持跨域訪問,所以,當(dāng)涉及到前端跨域請求后端接口的時(shí)候,需要做很多額外的配置,才能實(shí)現(xiàn)跨域Session認(rèn)證。

注意:

  • 當(dāng)前段請求后端接口不存在跨域問題的時(shí)候,推薦使用Session身份認(rèn)證機(jī)制。
  • 當(dāng)前端需要跨域請求后端接口的時(shí)候,不推薦使用Session身份認(rèn)證機(jī)制,推薦使用JWT認(rèn)證機(jī)制。

?2.什么是JWT

JWT(JSON Web Token)是目前最流行跨域認(rèn)證解決方案

3.JWT的工作原理

數(shù)據(jù)庫與身份認(rèn)證

總結(jié):用戶的信息通過Token字符串的形式,保存在客戶端瀏覽器中。服務(wù)器通過還原Token字符串的形式來認(rèn)證用戶的身份。

4.JWT的組成部分

?JWT通常由三部分組成,分別是Header(頭部)、Payload(有效荷載)、Signature(簽名)。

數(shù)據(jù)庫與身份認(rèn)證

數(shù)據(jù)庫與身份認(rèn)證

?6.JWT的三個(gè)部分各自代表的含義

JWT的三個(gè)組成部分,從前到后分別是:Header、Payload、Signatyre

其中:

  • Payload部分才是真正的用戶信息,它是用戶信息經(jīng)過加密之后生成的字符串
  • Header和Signature是安全性相關(guān)的部分,只是為了保證Token的安全性

數(shù)據(jù)庫與身份認(rèn)證

7.JWT的使用方式

客戶端收到 服務(wù)器返回的JWT之后,通常會將它存儲在localStoragesessionStorage

此后,客戶端每次與服務(wù)器通信,都要帶上這個(gè)JWT的字符串,從而進(jìn)行身份認(rèn)證。推薦的做法是把JWT放在HTTP請求頭的Authorization字段中,格式如下:

數(shù)據(jù)庫與身份認(rèn)證

5.6在Express中使用JWT

1.安裝JWT相關(guān)的包

運(yùn)行如下命令,安裝如下兩個(gè)JWT相關(guān)的包:

數(shù)據(jù)庫與身份認(rèn)證

?其中:

  • jsonwebtoken用于生成JWT字符串
  • express-jwt用于將JWT字符串解析還原成JSON對象

2.導(dǎo)入JWT相關(guān)的包

使用require()函數(shù),分別導(dǎo)入JWT相關(guān)的兩個(gè)包:

數(shù)據(jù)庫與身份認(rèn)證

?3.定義secret密鑰

為了保證JWT字符串的安全性,防止JWT字符串在網(wǎng)絡(luò)傳輸過程中被別人破解,我們需要專門定義一個(gè)用于加密和解密的secret密鑰:

①當(dāng)生成JWT字符串的時(shí)候,需要使用secret密鑰對用戶的信息進(jìn)行加密,最終得到加密好的JWT字符串。

②當(dāng)把JWT字符串解析還原成JSON對象的時(shí)候,需要使用secret密鑰進(jìn)行解密

數(shù)據(jù)庫與身份認(rèn)證

?4.在登錄成功后生成JWT字符串

調(diào)用jsonwebtoken包提供的sign()方法,將用戶的信息加密成JWT字符串,響應(yīng)給客戶端:

數(shù)據(jù)庫與身份認(rèn)證

5.將JWT字符串還原為JSON對象

客戶端每次?在訪問那些有權(quán)限接口的時(shí)候,都需要主動通過請求頭中的Authorization字段,將Token字符串發(fā)送到服務(wù)器。

此時(shí),服務(wù)器可以通過express-jwt這個(gè)中間件,自動將客戶端發(fā)送過來的Token解析還原成JSON對象:數(shù)據(jù)庫與身份認(rèn)證

6.使用req.user獲取用戶信息

當(dāng)express-jwt這個(gè)中間件配置成功之后,即可在那些有權(quán)限的接口中,使用req.user對象,來訪問從JWT字符串中解析出來的用戶信息了,示例代碼如下:

數(shù)據(jù)庫與身份認(rèn)證

7.捕獲解析JWT失敗后產(chǎn)生的錯(cuò)誤

當(dāng)使用express-jwt解析Token字符串時(shí),如果客戶端發(fā)送過來的Token字符串過期不合法,會產(chǎn)生一個(gè)解析失敗的錯(cuò)誤,影響項(xiàng)目的正常運(yùn)行。我們可以通過Express的錯(cuò)誤中間件,捕獲這個(gè)錯(cuò)誤并進(jìn)行相關(guān)的處理,示例代碼如下:

數(shù)據(jù)庫與身份認(rèn)證

? ?文章來源地址http://www.zghlxwxcb.cn/news/detail-499018.html

到了這里,關(guān)于數(shù)據(jù)庫與身份認(rèn)證的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • NACOS身份認(rèn)證繞過

    NACOS身份認(rèn)證繞過

    一、漏洞描述 Nacos是Alibaba的一個(gè)動態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺。攻擊者通過添加Nacos-Server的User-Agent頭部將可繞過(nacos.core.auth.enabled=true)鑒權(quán)認(rèn)證,從而進(jìn)行API操作。 二、漏洞利用 訪問 http://xxxxx/nacos/v1/auth/users?username=testpassword=test ,并使用burpsuite進(jìn)行抓包,將方法

    2024年02月16日
    瀏覽(27)
  • Nacos身份認(rèn)證漏洞

    Nacos身份認(rèn)證漏洞

    公司Nacos版本有用的2.0.1和2.0.3的都復(fù)現(xiàn)了身份認(rèn)證的漏洞,無需認(rèn)證身份就可以查看用戶列表以及注冊新用戶,并且注冊上來的新用戶可以查看所有public命名空間下的配置資源! 1、查看用戶列表 URL: http://ip:8848/nacos/v1/auth/users?pageNo=1pageSize=1 方法類型:GET 返回結(jié)果: 如圖示

    2023年04月10日
    瀏覽(25)
  • Nodejs七、身份認(rèn)證

    Nodejs七、身份認(rèn)證

    1、Web 開發(fā)模式 (1)目前主流的 Web 開發(fā)模式 基于 服務(wù)端渲染 的傳統(tǒng) Web 開發(fā)模式 基于 前后端分離 的新型 Web 開發(fā)模式 (2)服務(wù)端渲染的 Web 開發(fā)模式 服務(wù)器發(fā)送給客戶端的 HTML 頁面,是在服務(wù)器通過字符串的拼接,動態(tài)生成的。 客戶端不需要使用 Ajax 這樣的技術(shù)額外請

    2024年02月09日
    瀏覽(56)
  • ES開啟身份認(rèn)證

    ES開啟身份認(rèn)證

    X-Pack是Elastic Stack擴(kuò)展功能,提供安全性,警報(bào),監(jiān)視,報(bào)告,機(jī)器學(xué)習(xí)和許多其他功能。 X-Pack的發(fā)展演變: 1,5.X版本之前:沒有x-pack,是獨(dú)立的:security安全,watch查看,alert警告等獨(dú)立單元。 2,5.X版本:對原本的安全,警告,監(jiān)視,圖形和報(bào)告做了一個(gè)封裝,形成了x-pac

    2024年02月14日
    瀏覽(18)
  • 常見的身份認(rèn)證技術(shù)

    (1)?? 口令認(rèn)證技術(shù)(用戶名/密碼) 這是最簡單也是最傳統(tǒng)的身份認(rèn)證方法,通過口令來驗(yàn)證用戶的合法有效性。 通過用戶名 ?ID ?和用戶密碼 ?PW ?來認(rèn)證用戶。 只要能夠正確驗(yàn)證密碼,系統(tǒng)就判定操作者是合法用戶。 口令認(rèn)證主要適用于小型封閉型系統(tǒng)。 存在的問題

    2024年02月06日
    瀏覽(23)
  • 鑒權(quán)與身份認(rèn)證

    ? 所謂鑒權(quán)就是 身份認(rèn)證 ,就是驗(yàn)證您是否有權(quán)限從服務(wù)器訪問或操作相關(guān)數(shù)據(jù)。通俗的講就是一個(gè)門禁,您想要進(jìn)入室內(nèi),必須通過門禁驗(yàn)證身份,這就是鑒權(quán),如打開一個(gè)網(wǎng)站必須要輸入用戶名和密碼才可以登錄進(jìn)入,這種就是鑒權(quán),還有一些業(yè)務(wù)需要登錄以后才可以

    2024年03月14日
    瀏覽(31)
  • API身份認(rèn)證JWT

    是一種身份認(rèn)證的開放標(biāo)準(zhǔn)(RFC 7519),可以在網(wǎng)絡(luò)應(yīng)用間傳輸信息作為Json對象。由三部分組成:頭部(Header)、載荷(payload)和簽名(Signature). 頭部(Header) 兩部分組成,令牌類型和所使用的的簽名算法 ? 載荷(payload) 包含要傳輸?shù)男畔?,包括用戶的身份信息、?quán)限等。載

    2024年02月13日
    瀏覽(26)
  • Smartbi 身份認(rèn)證繞過漏洞

    因?yàn)樽约捍罱ǖ沫h(huán)境存在一些問題,可能是版本過高的原因,(奇奇怪怪的問題,用戶沒有權(quán)限),所以目前僅僅做概念性驗(yàn)證,對漏洞的原理進(jìn)行分析。 在未登錄的情況下訪問接口? /smartbi/vision/RMIServlet ? 我們可以比較明顯的看到對應(yīng)的處理類? CheckIsLoggedFilter ? smartbi.fre

    2024年02月16日
    瀏覽(22)
  • 身份證識別ocr、身份證實(shí)名認(rèn)證接口文檔

    每一次驗(yàn)證背后,都是對用戶數(shù)據(jù)安全的承諾,對平臺信譽(yù)的堅(jiān)守。翔云身份證實(shí)名認(rèn)證API,通過身份證識別接口僅需一鍵上傳身份證圖片即可快速識別身份證信息,翔云實(shí)名認(rèn)證接口實(shí)時(shí)聯(lián)網(wǎng)查驗(yàn)證件信息的真?zhèn)巍??PHP身份證實(shí)名認(rèn)證接口文檔代碼如下:

    2024年04月17日
    瀏覽(116)
  • Kafka安全模式之身份認(rèn)證

    Kafka安全模式之身份認(rèn)證

    Kafka作為一個(gè)分布式的發(fā)布-訂閱消息系統(tǒng),在日常項(xiàng)目中被頻繁使用,通常情況下無論是生產(chǎn)者還是消費(fèi)者只要訂閱Topic后,即可進(jìn)行消息的發(fā)送和接收。而kafka在0.9.0.0版本后添加了身份認(rèn)證和權(quán)限控制兩種安全服務(wù),本文主要介紹在實(shí)際項(xiàng)目使用過程中遇到第三方kafka需身份

    2024年04月13日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包