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 ,可以使用 jsonwebtoken 模块来生成和验证 JWT(JSON Web Tokens)。 首先需要安装 jsonwebtoken 模块,可以使用 npm 命令进行安装: ``` npm install jsonwebtoken ``` 接着,使用以下代码生成 token: ```javascript const jwt = require('jsonwebtoken'); const payload = { id: '123', username: 'john.doe', role: 'admin' }; const secret = 'mysecretkey'; const token = jwt.sign(payload, secret, { expiresIn: '1h' }); console.log(token); ``` 在这个例子,`payload` 是一个对象,包含要传递给客户端的数据。`secret` 是一个字符串,用于对 token 进行加密。`expiresIn` 是一个可选的参数,用于设置 token 的有效期。 接下来,可以使用以下代码验证 token: ```javascript const jwt = require('jsonwebtoken'); const secret = 'mysecretkey'; const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyMyIsInVzZXJuYW1lIjoiam9obi5kb2UiLCJyb2xlIjoiYWRtaW4iLCJleHAiOjE2MjM5NzY5MTB9.9z9WZ1tjKg2x2PdMkL8OyNz5cV7Kj1zZS5a5Ngf0Ku4'; jwt.verify(token, secret, (err, decoded) => { if (err) { console.error(err); } else { console.log(decoded); } }); ``` 在这个例子,`token` 是要验证的 token 字符串。`jwt.verify()` 方法会将 token 解密,并验证签名和有效期。如果验证成功,`decoded` 参数将包含解密后的数据。 需要注意的是,token 的数据是可以被解密的,因此不应该在其包含敏感信息。只有在经过验证后,才能信任其的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值