共计 1150 个字符,预计需要花费 3 分钟才能阅读完成。
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)
正文完