❤Nodejs 第十章(用户信息token认证和登录接口开发)

简介: 【4月更文挑战第10天】本文介绍了Node.js中实现用户信息token认证和登录接口的步骤。express-jwt的使用,接着创建基本的Express服务器,然后导入并使用jsonwebtoken和express-jwt。设置一个密钥,并定义一个中间件处理token验证。示例展示了登录接口的实现。遇到登录判断失效的问题后,对判断条件进行了优化。

❤Nodejs 第十章(用户信息token登录使用和开发)

1、安装

安装jsonwebtoken和express-jwt第三方包

yarn add jsonwebtoken express-jwt --save

2、创建一个基本的服务器

//导入express
const express = require('express')
 
//创建服务器对象
const app = express()
 
//启动服务器
app.listen(8888,function(){
    console.log('express server running at http://127.0.0.1:8888')
})

3、导入 jsonwebtoken 和 express-jwt 第三方包

//身份认证部分包
import jwt from 'jsonwebtoken' // 1.导入jsonwebtoken生成 jwt 字符串的包
import expressJWT  from 'express-jwt' // 2.导入将客户端发送过来的 JWT 字符串,解析还原成 JSON 对象的包
  

4、创建一个密钥

const secretKey = 'aflowerdemon is No1 ^_^' //密钥里边的字符可以自定义

注册将客户端发送过来的 jwt 字符串,解析还原成 JSON 对象的中间件 express-jwt
注意:

1.这边将jwt字符串解析出来的信息会被挂载到req.user属性上,可以通过req.user属性获取到信息。

2.下边的unless({path[]})中是不需要 token访问权限的路径。

3. 这边注意一下,你的登录请求路径,放一定在unless({path[]})中,让它无需token权限,否则你会一直请求失败(这个坑我踩过)如下边代码所示:

5、定义接口认证和接口白名单

path之中是不需要进行token认证的接口

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

接下来我们尝试访问用户接口

image.png

告诉我们没有授权访问信息

image.png

我们简单写一个白名单中的登录接口如下:

// 用户登录接口
app.post('/api/login', (req, res) => {
    let query = 'SELECT * FROM user';
    connectionpool.query(query, (err, results) => {
        console.log(err,'err');
        console.log(results,'results');
        if (err) {
            console.error('Error querying database:', err);
            res.status(500).json({ error: 'Internal server error' });
            return;
        }
        res.json({
            code: '200',
            data: results ? results[0] : {},
        });
    });
});

访问一下试试

返回的结果如下图所示:可以看出我们的接口可以正常访问

image.png

不在白名单的接口是无法进行访问的,访问就是未授权!

5、登录接口

接下来我们利用登录接口返回我们的token认证,我们做一个简单的模拟


// 用户登录接口
app.post('/api/login', (req, res) => {
    let query = 'SELECT * FROM user';

     // 登录失败
    if (req.body.username !== 'admin' && req.body.password !== '123456') {
      return res.send({
        status: '400',
        message: '登录失败'
      })
    }
    // 登录成功
    // 格式:jwt.sign({用户信息},密钥,token有效时长)
    var tokenStr = jwt.sign({ username: req.body.username }, secretKey, { expiresIn: '2h' })
    res.send({
      status: 200,
      message: '登录成功',
      token: tokenStr
    })
});

整个流程是这样子的:

请求接口,开始认证是否在白名单中
在白名单中,进行账号密码判断
失败=》返回信息
正确=》 jwt注册账号名,然后加密以后返回token

当我们输入正确的账号密码时:

image.png

错误时:

image.png

这里遇到了一下小问题,写的判断居然市失效了,最后清理了一下缓存,重新优化一下判断

// 用户登录接口
app.post('/api/login', (req, res) => {
    // let query = 'SELECT * FROM user';
    console.log(req.body,'req');
    console.log(req.body.username == 'admin');
    console.log(req.body.password == '123456');
    if (req.body.username == 'admin' && req.body.password == '123456') {
      // 登录成功
      console.log(111);
        // 先制作jwt字符串 记住千万不要把密码加密到 token 字符串中,这样容易被人破解密码
        // 格式:jwt.sign({用户信息},密钥,token有效时长)
        var tokenStr = jwt.sign({ username: req.body.username }, secretKey, { expiresIn: '2h' })
        res.send({
          status: 200,
          message: '登录成功',
          token: tokenStr
        })
    }else{
       // 登录失败
       console.log(222);
       res.send({
        status: '400',
        message: '登录失败'
      })
    }
});

ok! 问题成功解决!

目录
相关文章
|
2月前
|
Web App开发 缓存 JavaScript
深入浅出Node.js后端开发
【9月更文挑战第26天】本文将引导你了解Node.js的基本原理,并通过实际案例展示如何在后端开发中应用它。我们将从Node.js的核心概念讲起,逐步深入到构建一个完整的后端服务,最后探讨如何优化你的Node.js应用。准备好让你的开发技能更上一层楼了吗?让我们一起潜入Node.js的世界!
|
1月前
|
JavaScript 前端开发 NoSQL
深入浅出Node.js后端开发
本文将引导你了解Node.js的基础知识,包括安装、运行环境搭建以及简单的代码示例。通过阅读本文,你将学会如何利用Node.js进行后端开发,并理解异步编程和事件驱动模型的核心概念。文章还将介绍一些实用的库和框架,帮助你快速开始Node.js项目。
63 4
|
1月前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
64 3
|
1月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,从基础概念到实战应用,一步步揭示Node.js在后端开发中的魅力。我们将通过实际代码示例,让你轻松掌握Node.js的开发技巧,开启你的后端开发之旅。
|
9天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
14天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第31天】本文将引导你进入Node.js的奇妙世界,探索其如何革新后端开发。通过浅显易懂的语言和实际代码示例,我们将一起学习Node.js的核心概念、搭建开发环境,以及实现一个简单但完整的Web应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇通往高效后端开发的大门。
|
15天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第30天】本文将通过一个Node.js的简单示例,引导你进入Node.js的世界。我们将从基础概念讲起,然后一步步深入到代码实现,最后总结Node.js在后端开发中的优势和应用场景。无论你是前端开发者还是后端新手,这篇文章都将为你打开一扇了解Node.js的大门。
30 2
|
28天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
12天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
29 0
|
1月前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第7天】本文将带你进入Node.js的世界,从基本概念、环境搭建到实际案例,逐步深入探索Node.js在后端开发中的应用。我们将通过一个简单的在线聊天室项目,学习如何利用Node.js进行网络编程和数据处理,让你对Node.js有更全面的认识。
17 3