详解Node.js使用token进行认证的简单示例

下面我将为你详细讲解“详解Node.js使用token进行认证的简单示例”的完整攻略。

简介

在构建Web应用程序时,身份验证是非常重要的。一种常见的方法是使用基于token的身份验证。本文将介绍如何使用Node.js和JSON Web Tokens(JWT)实现基于token的身份验证。我们将创建一个简单的Express应用程序,并使用JWT生成和验证token。

步骤

第1步:安装依赖

我们将使用以下npm包来构建应用程序:

  • express - 用于创建应用程序和路由
  • body-parser - 用于解析HTTP请求正文中的JSON数据
  • jsonwebtoken - 用于生成和验证JWT

在命令行中运行以下命令来安装这些npm包:

npm install express body-parser jsonwebtoken

第2步:设置路由和控制器

我们将创建两个路由:

  • /authenticate - 用于生成token
  • /dashboard - 要求token进行身份验证

首先,我们将创建一个名为 routes/auth.js 的文件,并添加以下代码:

const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');

router.post('/authenticate', (req, res) => {
    const user = {
        id: 1,
        username: 'john.doe',
        email: 'john.doe@example.com'
    }

    jwt.sign({ user }, 'secretkey', { expiresIn: '30s' }, (err, token) => {
        res.json({ token });
    });
});

module.exports = router;

上面的代码创建了一个POST路由 /authenticate,用于生成包含用户名和过期时间的JWT。在这个示例中,我们使用固定的用户信息和密钥(secretkey)。在实际应用程序中,您可以从数据库中检索有关用户的信息并使用更安全的密钥。

接下来,我们将创建一个名为 routes/dashboard.js 的文件,并添加以下代码:

const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');

function verifyToken(req, res, next) {
    const token = req.header('Authorization').split(' ')[1];

    if (!token) return res.status(401).send('Access Denied');

    try {
        const decoded = jwt.verify(token, 'secretkey');
        req.user = decoded.user;
        next();
    } catch (err) {
        res.status(400).send('Invalid Token');
    }
}

router.get('/', verifyToken, (req, res) => {
    res.send(`Welcome ${req.user.username}!`);
});

module.exports = router;

上面的代码创建了一个GET路由 /dashboard,它要求在请求头中传递包含JWT的Authorization字段。该路由使用 verifyToken 中间件进行身份验证,该中间件会对JWT进行验证,并在验证无误后将用户信息添加到请求对象中。如果JWT无效,则中间件将返回“Invalid Token”错误消息。如果JWT有效,则路由将响应“Welcome [username]!”消息。

第3步:设置应用程序

首先,我们需要将所需的依赖项导入应用程序。打开 index.js 文件,并按照以下方式编辑:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

const authRoute = require('./routes/auth');
const dashboardRoute = require('./routes/dashboard');

app.use(bodyParser.json());

app.use('/auth', authRoute);
app.use('/dashboard', dashboardRoute);

app.listen(3000, () => console.log('Server started on port 3000'));

上面的代码将 routes/auth.jsroutes/dashboard.js 导入应用程序,并将它们分别设置为 /auth/dashboard 的路由。应用程序还使用 body-parser 解析请求正文中的JSON数据,并在http://localhost:3000 上启动服务器。

第4步:测试应用程序

现在我们已经设置好了应用程序,让我们使用POSTman测试该应用程序。首先,我们将向 /authenticate 发送POST请求,以获取包含JWT的响应消息。接下来,我们将向 /dashboard 发送GET请求,并在请求头中传递Authorization字段,其中包含JWT。

第一条测试示例

  • 打开POSTman
  • 创建POST请求,URL为 http://localhost:3000/auth/authenticate
  • 在请求主体中添加以下JSON数据:
{
    "username": "john.doe",
    "password": "mysecret"
}
  • 发送请求并复制响应主体中的JWT值
  • 创建GET请求,URL为 http://localhost:3000/dashboard
  • 在请求标头中添加Authorization键,并将其值设置为Bearer [JWT]
  • 发送请求并检查响应主体中的消息,它应该输出:Welcome john.doe!

第二条测试示例

  • 打开POSTman
  • 创建POST请求,URL为 http://localhost:3000/auth/authenticate
  • 在请求主体中添加以下JSON数据:
{
    "username": "jane.doe",
    "password": "mysecret"
}
  • 发送请求并复制响应主体中的JWT值
  • 创建GET请求,URL为 http://localhost:3000/dashboard
  • 在请求标头中添加Authorization键,并将其值设置为Bearer [JWT]
  • 发送请求并检查响应,它应该返回“Invalid Token”错误消息。

结论

这就是使用Node.js和JSON Web Tokens进行基于token的身份验证的简单示例。我们创建了两个路由,一个用于生成JWT,一个用于要求JWT进行身份验证。我们还使用了 jsonwebtoken npm包来生成和验证JWT。如果你想进一步了解JWT和Node.js的身份验证,请查看相关的官方文档。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Node.js使用token进行认证的简单示例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 简单了解JavaScript arguement原理及作用

    简单了解JavaScript arguement原理及作用 在JavaScript中,函数的参数(argument)是比较常见的概念。由于JavaScript的灵活性,argument在函数调用的时候可以有多种使用方式和用途。 argument的含义 argument是指函数调用时传递给函数的值。在函数的代码块中,我们使用argument来引用这些传递进来的…

    node js 2023年6月8日
    00
  • Node.js创建HTTP文件服务器的使用示例

    下面我将详细讲解如何使用Node.js创建HTTP文件服务器。 什么是HTTP文件服务器 HTTP文件服务器是指通过HTTP协议来访问和下载文件的服务器。在Web开发中,HTTP文件服务器非常常见,无论是上传文件还是下载文件,都需要通过HTTP来进行传输。Node.js提供了很多模块来创建HTTP服务器,其中最常用的就是http模块。 创建HTTP文件服务器…

    node js 2023年6月8日
    00
  • 2020字节跳动前端面试题一面解析(附答案)

    下面是针对“2020字节跳动前端面试题一面解析(附答案)”这篇文章的详细讲解完整攻略。 一、题目链接和基本信息 首先,我们需要提供文章链接和基本信息。这是为了方便读者获取原始资料,了解面试题目的来源和出题方。 文章链接:https://mp.weixin.qq.com/s/FBmhI1tnDRQglfp5XFKKEw出题方:字节跳动前端团队 二、题目分析和答…

    node js 2023年6月8日
    00
  • nodejs的路径问题的解决

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,因为其高效、轻量、可扩展等特性,而被广泛应用于 Web 开发、服务器端开发等领域。在 Node.js 的开发过程中,经常会涉及到路径的操作,比如读取文件、创建目录等等,因此,如何解决 Node.js 的路径问题是开发者必须具备的技能之一。 路径的表示 在 Node.js …

    node js 2023年6月8日
    00
  • Vite创建Vue3项目及Vue3使用jsx详解

    Vite创建Vue3项目及Vue3使用jsx详解 1. Vite创建Vue3项目 Vite是一个基于ES module的开发服务器和构建工具,它能够快速地搭建项目、实现热更新等功能。下面是使用Vite创建Vue3项目的详细步骤: 步骤1:安装Vite npm install vite -g 步骤2:创建项目 vite create my-project –…

    node js 2023年6月9日
    00
  • Node.js+express+socket实现在线实时多人聊天室

    Node.js是基于Chrome V8引擎的JavaScript运行环境,可以使得开发者在服务器端使用JavaScript语言。express是一种基于Node.js开发的Web应用框架,提供了一些常用的Web应用开发功能,并且易于扩展。socket是一种实现实时通讯的技术,能够使得客户端和服务器之间实现双向即时消息传输。 下面简单介绍如何通过Node.js…

    node js 2023年6月8日
    00
  • ExpressJS入门实例

    以下是关于“ExpressJS入门实例”的完整攻略: ExpressJS是什么? ExpressJS是一个基于Node.js的轻量级Web应用框架,它使用了MVC架构模式,封装了对Node.js的http模块的处理,能够更方便、更快捷地实现Web应用的开发。 安装ExpressJS 运行以下命令来安装ExpressJS: npm install expres…

    node js 2023年6月8日
    00
  • async/await优雅的错误处理方法总结

    异步编程中的错误处理 异步编程中的一个常见问题就是错误处理。在JavaScript中,我们可以使用try…catch语句来捕获同步代码的错误。但是对于异步代码来说,错误处理就需要一些特别的技巧。 Promise的错误处理 在Promise中,我们可以在链式调用的then和catch方法中捕获错误。如果前面的Promise发生错误,则会直接调用catch方…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部