第一次登录时会返回一个通过加密的token,下一次访问接口(携带登陆返回你的token)的时候,会对token进行解密,若是解密正在进行,说明你已经登陆,再把过时时间延长
npm init -y // 一键初始化 npm install express -s // 下载express npm install cors // 跨域中间件 npm install body-parser // body-parser中间件 解析带请求体的数据(post,put) npm install jsonwebtoken // 持久化登陆 jwt json web token
// 引入express let express = require('express') let cors = require('cors') let bodyParser = require('body-parser') let jwt = require("jsonwebtoken") // 拿到服务器 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请求前端
接收到数据web
获得tokenexpress
把 token 写入headernpm
// 登陆持久化验证接口 访问这个接口的时候 必定要访问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" }) } }) })
已有登陆帐号,持久化登陆成功json
token:jwt.sign({username:decode.username},'abcd',{ // 若是过时时间为1秒 expiresIn:"1s" })
得到 token跨域
设置头部信息服务器
验证 过时时间生效app