jwt 實現持久化登陸
原理
第一次登陸時會返回一個通過加密的token
下一次訪問接口時(攜帶登陸返回給你的token)會對token進行解密 若是解密正確 證實你已經登陸 再把過時時間延長
// 首先 npm init -y 一鍵初始化
// 引入 express 下載 npm install express
let express = require('express');
let app = express();
// 用於跨域 下載 npm install cors
let cors = require('cors');
// 解析帶請求體(post,put)的數據 下載 npm install body-parser
let bodyParser = require('body-parser');
// 引入 jwt 全稱 json web token 下載 npm install jsonwebtoken
let jwt = require('jsonwebtoken');
// 解析 json 格式
app.use(bodyParser.json())
// 解析 form 格式
app.use(bodyParser.urlencoded({extended:true}))
app.use(cors())
// 進行登陸持久化驗證的接口
// 訪問這個接口時 必定要攜帶 token 前端頁面每切換一次就訪問一下這個接口 問一下我有沒有登陸 或者登陸過時
app.post('/validate',function(req,res){
let token = req.headers.authorization;
// 驗證token的合法性
jwt.verify(token,'sxq',function(err,decode){
if(err){
res.json({
msg:'當前用戶未登陸'
})
}else{
// 證實用戶已經登陸 只要用戶操做就會有過時時間
res.json({
username:decode.user,
token:jwt.sign({username:decode.user},'sxq',{
// 過時時間
expiresIn:'1h'
})
})
}
})
})
// 持久化登陸的原理
// 第一次登陸時會返回一個通過加密的token
// 下一次訪問接口時(攜帶登陸返回給你的token)會對token進行解密 若是解密正確 證實你已經登陸 再把過時時間延長
// 模擬一個登陸接口 username password
app.post('/login',function(req,res){
let {username} = req.body
res.json({
// sign 參數 加密的對象 加密的規則
token:jwt.sign({username},'sxq',{
// 過時時間
expiresIn:'1h'
}),
username
})
})
// 接口
app.listen(3000)