❤Nodejs 第十一章(用户登录完善)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 【4月更文挑战第11天】在Node.js第十一章中,重点是完善用户登录系统。通过客户端发送的JWT token,服务器使用`express-jwt`中间件解析token并验证用户身份。在有权限的接口中,可以访问`req.user`获取用户信息。示例展示了如何获取和使用用户信息,包括从JWT中解码出的用户名(如`admin`),以及签发和过期时间戳。此外,还演示了如何根据接收到的用户名查询数据库以获取用户详细信息,从而确保登录功能的完整实现。

❤Nodejs 第十一章(用户登录完善)

上一章我们已经从登录部分拿到了用户的登录jwt返回的token信息,接下来我们就通过token来换取用户信息

1、解析 JWT字符串 还原为JSON对象

客户端每次在访问那些有权限接口的时候,都需要主动通过请求头中的 Authorization 字段,将 Token 字符串发送到服务器进行身份认证。

此时,服务器可以通过 express-jwt这个中间件,自动将客户端发送过来的 Token 解析还原成 JSON 对象:

token解析如下:

app.use(
  expressJWT.expressjwt({ secret: secretKey, algorithms: ["HS256"] }).unless({
    // path: [/^\/api\//],
    path: [
            '/',
            '/api/login',
            '/api/register',
            '/api/resetPwd'
     ]
  })
);

image.png

这个时候我们请求的接口里面携带一下刚刚的token然后访问一下试试

 axios({
        method: 'get',
        url: api,
        headers: {
            'Authorization': 'Bearer '+localStorage.getItem("login"),
            'Content-Type': 'application/json;charset=utf-8',
            'Custom-Header': 'custom-value'
        },
        params: params,
    })
    .then(res => {
        console.log(res.data);
        if (res.status == 200) {
            // console.log(res, 'res');
            tableData.value = res.data.data;
            totalvalue.value = res.data.total;
        }
    })
    .catch(error => {
        console.error(error);
    });

可以看到,这个时候我们的接口请求参数已经完全没问题了!

image.png

2、 获取用户信息(接口)

当 express-jwt 这个中间件配置成功之后,即可在那些有权限的接口中,使用 req.user 对象,来访问从 JWT 字符串中解析出来的用户信息了,示例代码如下:

// 这是一个有权限的api接口
app.get('/api/getInfo', (req, res) => {
    console.log(req.user);
    res.send({
        status: 200,
        message: 'success',
        data: req.user,
    })
})

从上面我们注册时候的接口可以看到,我们当时候注册了一个用户的username
image.png

返回的信息如下:

image.png

req.auth信息如下:
{ username: 'admin', iat: 1713773255, exp: 1713780455 }

返回的信息内容如下:

-   `username: 'admin'`: 这是 JWT 中存储的用户名信息,指示该令牌是以管理员身份签发的或者与管理员相关联的。
-   `iat: 1713773255`: 这是 JWT 的 "issued at"(签发时间)字段,表示 JWT 的签发时间。它是一个 Unix 时间戳,表示从 1970 年 1 月 1 日 00:00:00 UTC 到签发 JWT 的时间经过的秒数。
-   `exp: 1713780455`: 这是 JWT 的 "expiration time"(过期时间)字段,表示 JWT 的过期时间。也是一个 Unix 时间戳,表示 JWT 过期的时间点。在这个时间点之后,JWT 将不再被认为是有效的,需要重新获取新的 JWT。

3、查询我们数据用户信息

通过我们的用户接口返回的username参数去查询我们数据用户信息

app.get('/api/getInfo', (req, res) => {
    // 查询用户详情接口 
    const values=[req.auth.username];
    let query = 'SELECT * FROM user WHERE username = ?';
    connectionpool.query(query, values, (err, results) => {
        if (err) {
            console.error('Error querying database:', err);
            res.status(500).json({ error: '用户不存在!' });
            return;
        }else{
          res.json({
              code: '200',
              data: results?.length>0? results[0] : {},
          });
        }
    });
})

最后我们查到的数据库信息如下:
image.png

查询没问题,可以获取用户的信息!

目录
相关文章
|
6月前
|
小程序
基于微信小程序的语言课学习系统设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的语言课学习系统设计与实现(源码+lw+部署文档+讲解等)
52 2
基于微信小程序的语言课学习系统设计与实现(源码+lw+部署文档+讲解等)
|
JavaScript 前端开发 C++
前端基础知识备忘(1)
巩固下备忘下前端的基础知识
1513 51
|
前端开发 JavaScript Java
前端基础知识备忘(2)
巩固下备忘下前端的基础知识
1345 61
|
前端开发
前端学习笔记202303学习笔记第五天-了解vite项目的运行流程2 原创
前端学习笔记202303学习笔记第五天-了解vite项目的运行流程2 原创
82 0
|
搜索推荐 Python
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(十一)
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(十一)
186 0
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(十一)
|
Python
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(五)
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(五)
187 0
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(五)
|
数据可视化 Python 容器
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(二)
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(二)
174 0
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(二)
|
数据可视化 人机交互 Python
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(一)
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(一)
281 0
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(一)
|
数据可视化 Python
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(九)
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(九)
170 0
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(九)
|
Python
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(七)
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(七)
186 0
零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)(七)