❤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! 问题成功解决!

目录
相关文章
|
1月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
46 1
|
22天前
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
37 13
|
29天前
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
26天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
29天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
25天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。
|
28天前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
29天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带你走进Node.js的世界,从基础到进阶,逐步解析Node.js在后端开发中的应用。我们将通过实例来理解Node.js的异步特性、事件驱动模型以及如何利用它处理高并发请求。此外,文章还会介绍如何搭建一个基本的Node.js服务器,并探讨如何利用现代前端框架与Node.js进行交互,实现全栈式开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
27 4
|
1月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第40天】在这篇文章中,我们将一起探索Node.js的奥秘,从基础概念到实际应用,逐步揭示如何利用Node.js构建高效、可扩展的后端服务。通过实际案例分析,我们将了解Node.js在现代Web开发中的应用,以及如何克服常见的开发挑战。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,帮助你在Node.js的道路上更进一步。
30 4
|
1月前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第31天】本文将引导你进入Node.js的奇妙世界,探索其如何革新后端开发。通过浅显易懂的语言和实际代码示例,我们将一起学习Node.js的核心概念、搭建开发环境,以及实现一个简单但完整的Web应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇通往高效后端开发的大门。