JWT认证机制(Node.js)

JWT认证机制(Node.js)

***jwt:全称jsonwebtoken***是一种身份认证机制,其基本原理图如下:
在这里插入图片描述效果展示:
在这里插入图片描述在这里插入图片描述
代码实现:

//导入express模块
const express = require('express')
//创建web服务器app
const app = express()
//解析body表单数据中间件
app.use(express.urlencoded({ extended: false }))
app.use(express.json())
//导入跨域中间件
const cors = require('cors')
app.use(cors())

//001,导入jwt中间件
const jwt = require('jsonwebtoken')//生成 JWT 字符串
const expressJWT = require('express-jwt')//将 JWT 字符串解析还原成 JSON 对象
const { use } = require('express/lib/router')
//002,创建密钥
const secretKey = 'secretKey'
//只要配置成功了 express-jwt 这个中间件,就可以把解析出来的用户信息,挂载到 req.user 属性上
app.use(expressJWT({ secret: secretKey }).unless({ path: [/^\/api\//,'test'] }))

//003,生成 JWT 字符串
app.post('/api/login', (req, res) => {
    //判断用户是否登录成功
    const userinfo = req.body
    if(userinfo.username !== 'admin'||userinfo.password !== '00000')
    {
        return res.send({
            status:400,
            msg:'登录失败'
        })
    }
    res.send({
        status: 200,
        message: '登录成功',
        // jwt.sign() 生成 JWT 字符串
        // 参数:用户信息对象、加密密钥、配置对象-token有效期
        // 尽量不保存敏感信息,因此只有用户名,没有密码
        token: jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '300s' })
    })
})
//创建测试接口(有权限)
app.get('/test',(req,res)=>{
    console.log(req.user);
    res.send({
        status:200,
        msg:'登录成功',
        token:req.user
    })
})
//错误中间件的配置
app.use((err,req,res,next)=>{
    if(err.name === 'UnauthorizedError')
    {
        return res.send({
            status:1,
            err:'UnauthorizedError'
        })
    }
    res.send({
        status:1,
        err:'未知错误'
    })
    next()
})
//服务器启动
app.listen(8080, () => {
    console.log('服务器成功启动');
})

具体实现步骤:

(1),导入jwt相关中间件

//001,导入jwt中间件
const jwt = require(‘jsonwebtoken’)//生成 JWT 字符串
const expressJWT = require(‘express-jwt’)//将 JWT 字符串解析还原成 JSON 对象

(2),创建密钥

//002,创建密钥
const secretKey = 'secretKey’

(3),利用expressJWT将解析出来的jwt串挂载到use上。

//只要配置成功了 express-jwt 这个中间件,
//就可以把解析出来的用户信息,挂载到 
//req.user 属性上
app.use(expressJWT({ secret: secretKey })
.unless({ path: [/^\/api\//,'test'] }))

注意:.unless({path:[这里传一个匹配数组]}); 如[/^\/api\//,'test']
演示图:
在这里插入图片描述(4),生成 JWT 字符串
在这里插入图片描述
(5),测试接口写法
在这里插入图片描述注意:解析的jwt搭载到use上,所以要获取可以使用:req.user

(6),中间件的写法
在这里插入图片描述中间件在之前的文章简单介绍,在这里不赘述。

补充说明:
在这里插入图片描述

小编:O_O

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值