当前位置:网站首页>使用jsonwebtoken生成访问密钥
使用jsonwebtoken生成访问密钥
2022-04-23 05:54:00 【MiMenge】
后端
const {
response } = require('express');
const express = require('express');
const fs = require('fs');
const jwt = require('jsonwebtoken');
const app = express();
app.use(express.urlencoded({
extended: false }));
app.use(express.json());
app.use('*', (request, response, next) => {
// // 获取头部的token
// let token = request.headers.authorization;
// // 校验token
// jwt.verify(token, 'MiMenge001018', (err, data) => {
// if (err && err.message === 'invalid token') {
// return response.json({ message: '无效 token', code: 0 });
// } else if (err && err.message === 'jwt expired') {
// return response.json({ message: '失效 token', code: 0 })
// }
// });
next();
});
app.get('/', (request, response) => {
fs.readFile('./public/index.html', (err, data) => {
if (err) {
response.json({
message: '找不到页面资源', code: 0 });
} else {
response.send(data.toString());
}
});
});
app.get('/demo', (request, response) => {
fs.readFile('./public/demo.html', (err, data) => {
if (err) {
response.json({
message: '找不到页面资源', code: 0 });
} else {
response.send(data.toString());
}
});
});
app.post('/login', (request, response) => {
let {
uname, password } = request.body;
if (uname === 'Tom' && password === '1234') {
let token = jwt.sign({
uname: 'MiMenge',
iSRoot: true
}, 'MiMenge001018', {
expiresIn: 60
});
response.json({
message: 'OK', code: 0, token, });
}
});
app.post('/data', (request, response) => {
let token = request.headers.authorization;
jwt.verify(token, 'MiMenge001018', (err, data) => {
if (err) {
if (err.message === 'invalid token') {
return response.json({
message: '无效 token', code: 0 });
} else {
return response.json({
message: '失效 token', code: 0 })
}
} else {
response.json({
message: '成功', code: 1 });
}
})
});
app.listen(3300, err => {
if (err) {
console.error(err);
return;
}
console.log('success');
});
前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<a href="">获取</a>
<script> let a = document.querySelector('a'); a.addEventListener('click', (e) => {
e.preventDefault(); let token = localStorage.getItem('token'); let headers = new Headers({
'Authorization': token }); fetch('http://localhost:3300/data', {
method: 'post', headers }).then(data => data.text()).then(value => console.log(value)); // // 创建请求对象 // let xml = new XMLHttpRequest(); // // 初始化请求 // xml.open('post', 'http://localhost:3300/data', true); // // 设置请求头 // xml.setRequestHeader('Content-Type', 'application/json;charset=utf8'); // // console.log(JSON.stringify(new AddO(uname, pwd))); // // 发送请求数据 // xml.send(JSON.stringify({ 'token': token })); // // 设置请求延时 // xml.timeout = 3000; // xml.addEventListener('timeout', () => {
// xml.abort(); // }); // xml.addEventListener('error', () => {
// alert('错误的请求') // }); // xml.addEventListener('readystatechange', () => {
// if (xml.readyState === 4) {
// if (xml.status >= 200 && xml.status < 300 || xml.status === 304) {
// console.log(xml.responseText); // // console.log(xml.responseURL); // // console.log(xml.status); // // console.log(xml.statusText); // } // } // }); }); </script>
</body>
</html>
版权声明
本文为[MiMenge]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_53584564/article/details/123786829
边栏推荐
- VHDL-任意分频器(50%占空比)
- ES6的新特性
- undefined reference to `Nabo::NearestNeighbourSearch
- C语言结构体指定初始化
- [stepping on the pit] MELD in win11 wsl2 cannot be used normally. Problem repair
- Vs can be compiled, but there will be a red underline to indicate the problem of undefined identifiers
- JS实现私有属性
- Use of C language and
- ES6新增方法
- Eigen 库常用基本用法 备忘
猜你喜欢
FOC single resistance sampling position loop control servo motor
【ES6】 Promise相关(事件循环,宏/微任务,promise,await/await)
查漏补缺(二)
Principle and characteristic analysis of triode
基于VGG卷积神经网络的图像识别代码实现
Collection of practical tips for C language (continuously updated)
el-table添加序号
小程序学习笔记(一)
JS中 t, _ => 的解析
CUDA project encountered a series of compilation problems after changing the environment (computer)
随机推荐
说说ts的心里话
查漏补缺(四)
Assembly base code example
深蓝学院激光slam 理论与实践 第三章激光雷达去畸变 作业习题
赛氪-二进制
小程序学习笔记(一)
如何使用input表单向服务发送(占用较小)图片文件(body传输)?涉及到FileReader内置对象
HDU-Tunnel Warfare
Shell脚本 单引号、双引号和反引号的区别
2020 Jiangsu Collegiate Programming Contest-A.Array
时间戳转格式化日期
excel快速自动填充空白单元格上一行的内容
JS实现私有属性
查漏补缺(二)
MOS tube characteristics and conduction process
ES6
VHDL arbitrary frequency divider (50% duty cycle)
FOC 单电阻采样 位置环控制伺服电机
基于Keras的时装分类案例
realsense 选型大对比D455 D435i D415 T265 3D硬件对比