❤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

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

目录
相关文章
|
7月前
|
JSON 缓存 JavaScript
❤Nodejs 第十章(用户信息token认证和登录接口开发)
【4月更文挑战第10天】本文介绍了Node.js中实现用户信息token认证和登录接口的步骤。express-jwt的使用,接着创建基本的Express服务器,然后导入并使用jsonwebtoken和express-jwt。设置一个密钥,并定义一个中间件处理token验证。示例展示了登录接口的实现。遇到登录判断失效的问题后,对判断条件进行了优化。
265 2
|
7月前
|
存储 JavaScript 中间件
❤Nodejs 第十二章(图片存储接口-本地)
【4月更文挑战第12天】在Node.js第十二章中,主要讲解了错误中间件的编写和multer中间件的使用。错误中间件需置于所有路由之后,用于捕获并处理错误,防止接口崩溃。示例代码展示了如何处理token解析失败的错误。接着介绍了multer,它是处理multipart/form-data数据,尤其是用于文件上传的中间件。通过`yarn add --save multer`安装,并引入到项目中。最终,成功实现了图片上传并返回了可访问的图片路径。
147 2
|
7月前
|
SQL JavaScript 前端开发
❤Nodejs 第五章(操作本地数据库优化和处理)
【4月更文挑战第5天】本文介绍了在Node.js中操作本地数据库的优化和处理方法。首先展示了如何优化用户查询接口,根据用户条件查询用户列表。通过设置查询参数并使用axios发送GET请求,结合Express框架从`req.query`获取参数,实现动态SQL查询。接着,文章演示了根据用户ID查询用户详细信息,指出使用`req.params`而非`req.query`来获取URL路径中的动态ID。
74 5
|
7月前
|
移动开发 前端开发 IDE
前端知识笔记(三十四)———HBuilder的下载与使用(详细步骤)
前端知识笔记(三十四)———HBuilder的下载与使用(详细步骤)
241 0
|
存储 缓存 安全
图解用户登录验证流程,写得太好了!
图解用户登录验证流程,写得太好了!
373 0
图解用户登录验证流程,写得太好了!
|
消息中间件 缓存 Kafka
【随笔】学习记录、实用脚本
文章目录 工作随笔 一、kafka 1.1 基础命令 二、es 1.1 基础命令 三、实用小脚本 3.1 判断文件中是否有某个对应的值
110 0
【随笔】学习记录、实用脚本
|
Java Linux API
抱歉,Xposed真的可以为所欲为——1.基础知识储备(上)
本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。
446 0
|
API
抱歉,Xposed真的可以为所欲为——1.基础知识储备(下)
本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。
766 0
|
前端开发 数据安全/隐私保护
❤掌控web表单功能深入交流❤
❤掌控web表单功能深入交流❤
195 0
❤掌控web表单功能深入交流❤
|
Web App开发 前端开发 JavaScript
【前端第一课】前端的基本概念;安装各类开发软件;git使用方法
【前端第一课】前端的基本概念;安装各类开发软件;git使用方法
下一篇
DataWorks