首页
关于我的
文章归档
友情链接
更多
随机进入
Search
1
解决包下载慢的问题
1,174 阅读
2
PHP简易本地授权实现
219 阅读
3
RSA生成密钥和公钥
69 阅读
4
mysql分批插入数据
65 阅读
5
常用sql语句
63 阅读
默认分类
前端技术
登录
Search
标签搜索
node.js
express
mysql
PHP
FileSystem
path
npm
jsonwebtoken
session
中间件
axios
RSA
FengXin
累计撰写
14
篇文章
累计收到
0
条评论
首页
栏目
默认分类
前端技术
页面
关于我的
文章归档
友情链接
随机进入
搜索到
1
篇与
的结果
2023-07-24
在express中使用JWT
安装 JWT 和 jsonwebtokennpm i express-jwt jsonwebtoken导入两个相关包// TODO_01:安装并导入 JWT 相关的两个包,分别是 jsonwebtoken 和 express-jwt const jwt = require('jsonwebtoken') const expressJWT = require('express-jwt')定义 secret 密钥// TODO_02:定义 secret 密钥,建议将密钥命名为 secretKey const secretKey = 'itheima No1 ^_^'生成 JWT 字符串// 登录接口 app.post('/api/login', function (req, res) { // 将 req.body 请求体中的数据,转存为 userinfo 常量 const userinfo = req.body // 登录失败 if (userinfo.username !== 'admin' || userinfo.password !== '000000') { return res.send({ status: 400, message: '登录失败!', }) } // 登录成功 // TODO_03:在登录成功之后,调用 jwt.sign() 方法生成 JWT 字符串。并通过 token 属性发送给客户端 // 参数1:用户的信息对象 // 参数2:加密的秘钥 // 参数3:配置对象,可以配置当前 token 的有效期,s:秒,h:小时 // 记住:千万不要把密码加密到 token 字符中 const tokenStr = jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '30s' }) res.send({ status: 200, message: '登录成功!', token: tokenStr, // 要发送给客户端的 token 字符串 }) })将 JWT 字符串还原为 JSON 对象// TODO_04:注册将 JWT 字符串解析还原成 JSON 对象的中间件 // 注意:只要配置成功了 express-jwt 这个中间件,就可以把解析出来的用户信息,挂载到 req.user 属性上,‘/api’ 开头的接口不需要权限 app.use(expressJWT({ secret: secretKey }).unless({ path: [/^\/api\//] }))在有权限的接口中调用 req.user 对象// 这是一个有权限的 API 接口 app.get('/admin/getinfo', function (req, res) { // TODO_05:使用 req.user 获取用户信息,并使用 data 属性将用户信息发送给客户端 console.log(req.user) res.send({ status: 200, message: '获取用户信息成功!', data: req.user, // 要发送给客户端的用户信息 }) })捕获解析 JWT 失败后产生的错误// TODO_06:使用全局错误处理中间件,捕获解析 JWT 失败后产生的错误 app.use((err, req, res, next) => { // 这次错误是由 token 解析失败导致的 if (err.name === 'UnauthorizedError') { return res.send({ status: 401, message: '无效的token', }) } res.send({ status: 500, message: '未知的错误', }) })
2023年07月24日
61 阅读
0 评论
0 点赞