详解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日

相关文章

  • nodejs搭建本地服务器并访问文件操作示例

    下面是详细的攻略。 简介 Node.js 是一个基于 Chrome V8 JavaScript 引擎构建的 JavaScript 运行时环境,使 JavaScript 可以脱离浏览器运行于服务器端。它的出现使得 JavaScript 不再局限于浏览器,可以利用它进行服务器端的操作。本攻略将介绍如何利用 Node.js 搭建本地服务器并进行文件操作。 服务端搭…

    node js 2023年6月8日
    00
  • NodeJS通过魔术封包唤醒局域网计算机实例

    NodeJS通过魔术封包唤醒局域网计算机实例 简介 在局域网环境中,如果计算机实例(比如服务器或者单片机等)处于待机状态,想要让其主动唤醒可能需要手动操作电源按钮或者在开机时设置开机启动等较为麻烦的方式。本文将介绍如何通过 NodeJS 编写实现局域网计算机实例的远程唤醒。 网卡的 Magic Packet 特性 局域网中的网络适配器(网卡)都支持一项叫做 …

    node js 2023年6月8日
    00
  • node.js中的fs.stat方法使用说明

    当我们在 Node.js 中需要读取、写入或者操作文件时,需要使用 fs 模块。在 fs 模块中,fs.stat() 方法可以用于获取文件的状态,例如文件大小、创建时间、修改时间等信息。本文将详细讲解如何使用 fs.stat() 方法。 fs.stat() 方法介绍 fs.stat() 方法用于获取文件的状态信息,如文件大小、创建时间、修改时间等。它的语法如…

    node js 2023年6月8日
    00
  • Nodejs模块的调用操作实例分析

    下面是“Nodejs模块的调用操作实例分析”的完整攻略。 1. Node.js模块概述 在Node.js中,一个.js文件就是一个模块。在一个模块中,可以定义变量、函数、类等内容,并通过module.exports将这些内容暴露出去。其他模块可以通过require函数引入这些内容,从而调用这些在模块中定义的变量、函数、类等。 2. Node.js模块的引入 …

    node js 2023年6月8日
    00
  • 根据配置文件加载js依赖模块

    加载 JS 依赖模块是一个非常常见的需求。通过配置文件加载 JS 依赖模块可以使你的代码方便地管理和维护。下面是加载 JS 依赖模块的完整攻略。 第一步:安装依赖项 在使用配置文件加载 JS 依赖模块之前,你需要安装一个模块管理器,例如 require.js 或者 webpack。 以 require.js 为例,你可以通过以下命令安装: npm insta…

    node js 2023年6月8日
    00
  • node封装一个控制台进度条插件​​​​​​​详情

    下面就给您讲解一下 “node封装一个控制台进度条插件”的攻略。 1.了解进度条插件相关知识 首先,我们需要了解一下进度条插件的相关知识。所谓进度条插件,就是在某个任务运行时,以一定频率输出当前的进度,用于直观的表示任务是否已完成或正在进行。一般情况下,进度条插件会在控制台中输出一行文本,其中包含百分比和进度条等可视化信息。 2.安装进度条插件 使用npm安…

    node js 2023年6月8日
    00
  • nodejs切换版本使用最新教程(不需要卸载重装)

    下面是针对“nodejs切换版本使用最新教程(不需要卸载重装)”的完整攻略,包含以下内容: 1. 确认环境 在开始更改Node.js版本之前,请确保您的计算机已安装Node.js。您可以打开终端应用程序并键入以下命令来查看安装的版本: node -v 2. 安装n模块 接下来,我们需要安装“n”,这是一个简单的命令行工具,可以帮助我们快速地切换Node.js…

    node js 2023年6月7日
    00
  • nodejs实现遍历文件夹并统计文件大小

    要实现遍历文件夹并统计文件大小,我们需要使用nodejs提供的fs模块来操作文件系统,并使用递归函数遍历文件夹。以下是具体步骤: 步骤1 – 引入模块 首先需要引入fs模块,它可以方便地对文件和文件夹进行操作。我们还需要引入path模块,它可以处理路径。 const fs = require(‘fs’); const path = require(‘path…

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