原理
第一次登陸時會返回一個經過加密的token,下一次訪問接口(攜帶登錄返回你的token)的時候,會對token進行解密,如果解密正在進行,說明你已經登錄,再把過期時間延長
下載
npm init -y // 一鍵初始化npm install express -s // 下載expressnpm install cors // 跨域中間件npm install body-parser // body-parser中間件 解析帶請求體的數據(post,put)npm install jsonwebtoken // 持久化登錄 jwt json web token
基本配置
// 引入expresslet express = require('express')let cors = require('cors')let bodyParser = require('body-parser')let jwt = require("jsonwebtoken")let banner = require("./banner")// 拿到服務器let app = express()app.use(cors())app.use(bodyParser.json())app.use(bodyParser.urlencoded({extended:false}))// listen 后面跟著的是端口app.listen(8000,function(){ console.log('OK')})
模擬一個登陸的接口
app.post('/login',function(req,res){ let {username} = req.body console.log(username) res.json({ // 進行加密的方法 // sing 參數一:加密的對象 參數二:加密的規則 參數三:對象 token:jwt.sign({username:username},'abcd',{ // 過期時間 expiresIn:"1h" }), username, code:200 })})
postMan模擬 發送POST請求
接收到數據
得到token
登錄持久化驗證
把 token 寫入header
// 登錄持久化驗證接口 訪問這個接口的時候 一定要訪問token(前端頁面每切換一次,就訪問一下這個接口,問一下我有沒有登錄/登陸過期)// 先訪問登錄接口,得到token,在訪問這個,看是否成功app.post('/validate',function(req,res){ // 訪問 token let token = req.headers.authorization; // console.log(token) // 驗證token合法性 對token進行解碼,解碼方式要和加密方式一樣 jwt.verify(token,'abcd',function(err,decode){ if(err){ res.json({ msg:'當前用戶未登錄' }) }else { // 證明用戶已經登錄 res.json({ username:decode.username, msg:'已登錄' }) token:jwt.sign({username:decode.username},'abcd',{ // 過期時間 expiresIn:"1h" }) } })})
已有登錄賬號,持久化登錄成功
設置登錄過期時間
token:jwt.sign({username:decode.username},'abcd',{ // 如果過期時間為1秒 expiresIn:"1s"})
獲得 token
設置頭部信息
驗證 過期時間生效
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。
新聞熱點
疑難解答