用戶信息認證session和token


在進行用戶信息認證之前,我們需要先知道兩個知識點:

(1):http是無狀態協議。所以,在進行信息認證時,我們需要引入狀態機制,也就是session機制。

(2):cookie,與域名有關,域名不變,cookie不變。也就是說,在同一域名下,請求各種資源都會攜帶cookie回后端。

下面來談談兩種認證方式:

1.session(會話)

這種方式依賴於cookie,我們也稱它為setCookie(種cookie)。

原理:當前端發出一次請求時,后端產生一個session ID,后端自動通過response返還給前端,也就是setCookie,用戶請求第二個頁面時,瀏覽器自動通過request攜帶cookie到后端進行比較。

以下步驟為操作過程:

  • 安裝express-session(yarn add express-session)

  • 配置session,一定要在路由之前配置。

    // session 配置,配置在路由之前
    app.use(session({
      secret: 'keyboard cat',
      resave: false,
      saveUninitialized: false,
      cookie: {
        httpOnly: true, 
        secure: false,
        maxAge: 24 * 60 * 60 * 1000
      }
    }))

  • 引入express-session后就直接有了session對象

擴展:

由此引出一個新的問題:登錄不過期時,用戶關閉瀏覽器再次打開,首頁面依然保持登錄狀態。如何判斷用戶是否登陸過?以下提供兩種解決方案:​

第一種:通過判斷cookie(sessionID)是否存在。缺點:sessionID不攜帶用戶信息。

第二種:再次請求后端API,判斷req.session.username是否存在,返回給前端一個信息。
2. 生成token(基於jwt(jsonwebtoken)的認證機制)

(1)生成token

方法一:對稱加密:SH256
方法二:非對稱加密:RS256,私鑰加密,公鑰解密。(github的傳輸就是采用非對稱加密)

(2)后端向前端傳輸數據的方式有四種:

  • get(在queryString中顯示)

  • post(FormData中顯示)

  • 通過自定義路由載荷一個對象

  • 設置響應頭res.header

  要注意最后一種傳輸方式,前端接收時,如果采用jquery中ajax的success:(data,status,xhr)=>{}中的方法來獲取response的頭部信息會有坑,最好使用.then()方法。

(3)傳遞到前端,利用localstorage.setItem()存儲token。token並不存儲在服務器端,所以刪除的時候要記得,從哪里存儲,就在哪里刪除。

(4)用戶發起請求時,前端要想后端傳遞token,可使用jquery中$.ajax中的header配置。后端用req.header()取出token,進行驗證,利用cert(簽名)進行解密。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM