首页 > 其他分享 >jwt 身份认证

jwt 身份认证

时间:2022-10-13 14:22:21浏览次数:46  
标签:req res express jwt 认证 secretKey token 身份

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: '未知错误'
    })
    
})

 

标签:req,res,express,jwt,认证,secretKey,token,身份
From: https://www.cnblogs.com/zhaojvn/p/16785810.html

相关文章