1. 程式人生 > 實用技巧 >身份驗證 關於token

身份驗證 關於token

token

什麼是token

在計算機身份認證中是令牌(臨時)的意思,在詞法分析中是標記的意思。一般作為邀請、登入系統使用

    1、Token的引入:Token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。

    2、Token的定義:Token是服務端生成的一串字串,以作客戶端進行請求的一個令牌,當第一次登入後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求資料即可, 無需再次帶上使用者名稱和密碼。

    3、使用Token的目的:Token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。

  token機制,在服務端不需要儲存使用者的登入記錄,全部發給客戶端有客戶端自己存(cookie,local)

    1.客戶端使用使用者名稱跟密碼請求登入

    2.服務端收到請求,去驗證使用者名稱與密碼

    3.驗證成功後,服務端會簽發一個 Token(加了密的字串),再把這個 Token 傳送給客戶端 ​

    4.客戶端收到 Token 以後可以把它儲存起來,比如放在 Cookie 裡或者 Local Storage 裡 ​

    5.客戶端每次向服務端請求資源的時候需要帶著服務端簽發的 Token ​

    6.服務端收到請求,然後去驗證客戶端請求裡面帶著的

Token,如果驗證成功,就向客戶端返回請求的資料

JWT

  JWT 代表 JSON Web Token ,它是一種用於認證頭部的 token 格式。這個 token 幫你實現了在兩個系統之間以一種安全的方式傳遞資訊

  安裝:npm install jsonwebtoken

  引入: let jwt = require(‘jsonwebtoken’)

  生成簽名:let token = jwt.sign(payload,secretOrPrivateKey,[options,callback])

      [payload] json 還有username,userid

      [secretOrPrivateKey] 加密規則,字串,或者私鑰path模組

      [options] 可選配置項,expiresIn 過期時間 "30d" 30天

      [callback] 成功回撥, 可選 返回製作後的token,也可同步返回

監聽登入時的請求,或者使用者名稱和密碼進行對地,如果正確返回token,如果不正確說明使用者名稱密碼錯誤

在相應的檔案中

router.get('/login',function(request,response){
    // request 前端發起的請求
    // response 後端的響應
    // get 請求的引數 req.query  獲取url中?後面的引數,自動轉為了物件
    // { username: 'zhangsan', password: '123456' }
    let adminName = 'admin';
    let adminPwd = '12345';
    console.log(request.query)
    let username = request.query.username;
    let password = request.query.password;
    console.log(username,password)
    if(username == adminName && password === adminPwd){
        //登入成功,生成toekn,下發token
    console.log('登入成功,生成toekn,下發token')
    let token =  jwt.sign({id:1,username},'scret12',{expiresIn:"30d"});
        console.log(token)
        response.send({code:1,msg:"登入成功",data:{token}})

    }else{

        console.log('登入失敗')
    }  
}) 

可以在postman中發起請求,輸入正確的使用者名稱密碼。

返回的值如圖所示

終端中顯示的效果: