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)