posts - 2,  comments - 0,  views - 197

jsonwebtoken: 把json对象生成token格式

express-jwt: 把token对象翻译成json对象

 1、安装jsonwebtoken   npm i jsonwebtoken

 2、安装express-jwt  npm i express-jwt 

安装并导入 JWT 相关的两个包,分别是 jsonwebtoken 和 express-jwt

const jwt = require('jsonwebtoken')
const expressJWT = require('express-jwt')

解析 post 表单数据的中间件

const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))

 

在登录成功之后,调用 jwt.sign() 方法生成 JWT 字符串。并通过 token 属性发送给客户端

定义 secret 密钥,建议将密钥命名为 secretKey

const secretKey = 'ThisMe_123'  //字符串随意写 越复杂越好)

复制代码
router.post('/public/login', (req, res) => {
    if (req.body.username !== 'zj' || req.body.password !== 'zj12345') {
        return res.send({
            static: 1,
            msg: '用户名或密码错误'
        })
    }
    //参数1:用户的信息
    //参数2:加密的密钥
    //配置对象:配置的有效日期
    const token = jwt.sign({ username: req.body.username }, secretKey, { expiresIn: '30s' })
    console.log(token)
    res.send({
        static: 0,
        msg: '登录成功',
        token: 'Bearer '+token
    })
})
复制代码

使用express-jwt

只要配置成功了 express-jwt 这个中间件,就可以把解析出来的用户信息,挂载到 req.user 属性上

7.0以前的版本配置方式:

router.use("/",expressJWT({ secret: secretKey }).unless({ path: [/^\/public\//] })) //排除以public开头的路径

 

7.0以后的配置方式

router.use("/", expressJwt.expressjwt({ secret: secretKey, algorithms: ['HS256'] }).unless({ path: [/^\/public\//] }))

 

全局错误处理中间件,捕获解析 JWT 失败后产生的错误

复制代码
router.use((err, req, res, next) => {
    if (err.name === 'UnauthorizedError') {
        return res.send({
            status: 406,
            msg: 'token不存在'
        })
    } 
    res.send({
        status: 500,
        msg: '未知错误'
    })
    
})
复制代码

 

posted on   逆风航行  阅读(131)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示