jwt:json web token
token是一串加密的信息,服务端将用户信息加密成token发给前端存储,前端发给服务端解密获取数据
它的概念自己搜。。。
//node 代码
var express = require("express");
var bodyParser = require("body-parser");
var expressJwt = require("express-jwt");
var jwt = require("jsonwebtoken");
var app = express();
// post请求中间件
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
//设置静态资源(放个网页)
app.use(express.static("static"));
// jwt中间件
app.use(expressJwt({
secret: "secret"//加密密钥,可换
}).unless({
path: ["/login"]//添加不需要token的接口
}));
// 未携带token请求接口会出错,触发这个
app.use(function(err, req, res, next) {
if (err.name === "UnauthorizedError") {
res.status(401).send(err);
}
});
app.post("/login", function(req, res) {
var username = req.body.username;
var password = req.body.password;
if (!username||!password) {
return res.status(400).send("输入username及password");
}
// 加密,获取token
var authToken = jwt.sign({
username: username,
password:password
}, "secret",{
expiresIn : 60*60*24// 授权时效24小时
});
// 发送给前端,存在浏览器里
res.status(200).json({
token: authToken
});
});
app.post("/user", function(req, res) {
var token = req.body.token;
//用 加密密钥 解密,获得信息,包括生成及失效日期(如果设置了失效时间)
jwt.verify(token, "secret", function(err, decoded) {
if (err) {
res.status(200).json(err)
} else {
res.status(200).json(decoded);
}
})
})
app.listen(3000);
//前端代码
<!DOCTYPE html>
<html>
<head>
<title>jwt</title>
</head>
<body>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" >
$(function(){
$.ajax({
url:"./login",
method:"POST",
data:{
username:"x",
password:"h"
},
dataType:"json"
}).done(function(data){
console.log(data);
back(data.token);
}).fail(function(data){
console.log(data)
})
//用token请求需要token的接口
function back(token){
$.ajax({
url:"./user",
method:"POST",
headers:{
//将token添加在这
Authorization:"Bearer "+token
},
data:{
token:token
},
dataType:"json"
}).done(function(data){
console.log(data)
}).fail(function(data){
console.log(data)
})
}
})
</script>
</body>
</html>