node中使用JWT生成token

1.安装jsonwebtoken和express-jwt

npm i jsonwebtoken express-jwt

2.实例

// 安装:npm i jsonwebtoken express-jwt

// 1.导入express
const express = require('express')
const jwt = require('jsonwebtoken')
const expressJWT = require('express-jwt')


// 2.创建web服务器
const server = express()

// 3.监听服务器的启动
server.listen(8889, () => {
    console.log("web服务器启动了 http://127.0.0.1:8889");
})

// 4.解析post传参
// 4.1post请求通过body传参并为raw类型中json格式传参时,通过express.json()这个中间件,解析表单中的JSON格式的数据,不解析就拿不到req.body
server.use(express.json()) // 解析JSON格式数据
// 4.2post请求通过body传参并为x-www-form-urlcoded类型传参时,通过express.urlencoded()这个中间件,解析表单中的 url-encoded 格式的数据,不解析就拿不到req.body
server.use(express.urlencoded({ extended: false })) // 解析url-encoded 格式的数据



// 5.定义secret秘钥,可以随意定义
const secretKey = 'kanno&fangbaobao'

// 6.注册将JWT字符串解析还原成JSON对象的中间件,并且路由有/api的接口就不需要token,例如下面的登录接口
server.use(expressJWT({secret: secretKey}).unless({path:[/^\/api\//]}))

// 7.登录接口
server.post('/api/login', (req, res) => {
    const userInfo = req.body;
    if (req.body.username !== 'admin' || req.body.password !== '123456') {
        return res.send({ code: 200, status: 0, msg: '登录失败,请检查账号密码正确!' })
    }
    // 登录成功后,调用jwt.sign()方法生成JWT字符串。并通过token属性发送到客户端
    // 参数1:用户的信息对象
    // 参数2:加密的秘钥
    // 参数3:配资对象,可以配置当前token的有效期
    res.send({
        code: 200, 
        status: 1, 
        msg: '登录成功!',
        token:jwt.sign({username:userInfo.username},secretKey,{expiresIn:'30s'})
    })
})

// 8.获取token-获取用户信息
server.get('/user', (req, res) => {
    console.log("req222",req.user);
    res.send({
        code: 200,
        status: 1,
        msg: "success",
        data: {
            username:req.user.username
        }
    })
})

// 9.注册错误中间件
server.use((err,req,res,next)=>{
    if(err.name==='UnauthorizedError'){
        return res.send({
            code:401,
            msg:"无效的token"
        })
    }
    res.send({
        code:500,
        msg:'未知的错误'
    })
})

你可能感兴趣的:(node.js,express,node.js)