node.js实现token身份验证的示例代码

下面是针对实现Token身份验证的完整攻略,包括示例代码的过程。

什么是Token身份验证?

Token身份验证是一种客户端和服务器之间安全传输数据的方式。这种方法不要求用户在每一个请求中都提供他们的用户名和密码,因此可以更好的保护用户的个人信息和数据。 Token是一串随机字符,一般是通过加密算法来生成。 主要应用于Web开发中,用于防止CSRF攻击和提高授权机制。

实现Token身份验证的步骤

实现Token身份验证您需要执行以下步骤:

  1. 创建Web服务
  2. 生成TOKEN密钥
  3. 创建请求并将 TOKEN 发送到客户端
  4. 将TOKEN发送到服务器
  5. 在服务器上验证 TOKEN

下面我们将会使用Node.js来实现一个最简单的Token身份验证应用。

使用Node.js实现Token身份验证

使用Express框架创建Web服务

首先,我们需要创建一个Node.js项目并使用Express框架来创建一个Web服务。我们可以使用以下命令来创建一个新项目:

$ npm init --yes

这将会创建一个名为 package.json 的文件。然后,通过执行以下命令来安装 expressjs

$ npm install --save express

接下来,在根目录下创建一个名为 server.js 的文件,并将以下代码添加到文件中:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello World!');
});

const server = app.listen(3000, () => {
    console.log(`Server running on port ${server.address().port}`);
});

此代码将创建一个基本的Web服务,并监听端口3000。执行以下命令可以启动该服务:

$ node server.js

生成TOKEN密钥

为了实现Token身份验证,我们需要生成一个Token密钥。我们可以使用 jsonwebtoken 库来生成Token。执行以下命令来安装它:

$ npm install --save jsonwebtoken

可以在 server.js 文件中添加以下代码:

const jwt = require('jsonwebtoken');

const secretKey = 'mysecretkey';

const generateToken = (user) => {
    return jwt.sign(user, secretKey);
};

以上代码添加了一个名为 secretKey 的变量,它是用来加密Token的密钥。还定义了一个名为 generateToken 的函数,它接收一个用户对象作为参数并返回一个Token。

创建请求并将TOKEN发送到客户端

下一步,我们需要将Token发送到客户端。我们可以使用以下代码来实现:

app.get('/login', (req, res) => {
    // 根据客户端请求的用户信息生成token
    const token = generateToken({ username: 'john' });
    // 将token发送到客户端
    res.json({token});
});

以上代码将创建一个名为 '/login' 的路由,该路由将生成一个Token并将其发送到客户端。

将TOKEN发送到服务器

接下来,我们需要从客户端中获取Token并将其发送到服务器。以下是客户端代码:

fetch('/login')
    .then(response => response.json())
    .then(data => {
        const token = data.token;
        fetch('/protected', {
            headers: {
                'Authorization': `Bearer ${token}`
            }
        })
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error(error));
    })
    .catch(error => console.error(error));

以上代码将从 /login 路由中获取Token,并将其作为 Authorization 头部中的 Bearer 参数发送到另一个名为 /protected 的路由。

在服务器上验证 TOKEN

最后,我们需要在服务器上验证Token,并确定其是否有效。以下是服务器端代码:

app.get('/protected', (req, res) => {
    const token = req.headers.authorization.split(' ')[1];

    if (token) {
        jwt.verify(token, secretKey, (err, decoded) => {
            if (err) {
                return res.status(401).json({ message: 'Invalid token' });
            } else {
                return res.json({ message: 'Success!' });
            }
        });
    } else {
        return res.status(401).json({ message: 'Unauthorized' });
    }
});

以上代码将创建一个名为 '/protected' 的路由,以验证客户端请求中的Token的有效性。如果Token无效,服务器将返回 401 Unauthorized 状态码。如果Token有效,则服务器将返回一个成功消息。

示例说明

  1. 登录验证

对于登录验证,我们必须先检查用户输入的用户名和密码是否正确。如果正确,我们将生成一个Token并将其发送给客户端。示例代码如下:

app.post('/login', (req, res) => {
    const { username, password } = req.body;
    if (username === 'john' && password === 'password') {
        const token = generateToken({ username });
        res.json({ token });
    } else {
        res.status(401).json({ message: 'Unauthorized' });
    }
});

上述代码使用POST请求来向服务器请求登录。我们将用户输入的用户名和密码与“后端”存储的数据进行比较。如果用户名和密码正确,则使用generateToken函数生成一个Token,并将其发送回客户端。否则,我们将返回401 Unauthorized 状态码。

  1. Token有效性验证

为了验证Token的有效性,我们需要创建一个名为 ensureToken 的中间件函数,并在 /protected 路由上使用它。示例代码如下所示:

const ensureToken = (req, res, next) => {
    const bearerHeader = req.headers['authorization'];
    if (typeof bearerHeader !== 'undefined') {
        const bearerToken = bearerHeader.split(' ')[1];
        req.token = bearerToken;
        next();
    } else {
        res.status(403).json({ message: 'Forbidden' });
    }
};

// 校验路由
app.get('/protected', ensureToken, (req, res) => {
    jwt.verify(req.token, secretKey, (err, decoded) => {
        if (err) {
            res.status(401).json({ message: 'Unauthorized' });
        } else {
            res.json({ message: 'Success!', user: decoded });
        }
    });
});

上述代码使用了一个名为 ensureToken 的中间件函数,用于确保请求中包含有效的Token。如果Token有效,则通过调用next()函数将控制权传递给 /protected 路由。该路由将验证Token的有效性,并返回一个成功消息与解密后的用户对象。否则将返回401 Unauthorized 状态码。

这些就是示例代码的两种用途。通过以上攻略,相信您已经掌握了实现Token身份验证的流程和方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js实现token身份验证的示例代码 - Python技术站

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

相关文章

  • 详解Nodejs的timers模块

    关于Nodejs的timers模块,它为JavaScript提供计时器相关的API,包括定时器、清除定时器等。下面详细讲解一下。 定时器API 1. setTimeout() setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 setTimeout(() => { console.log(‘2 seconds have passe…

    node js 2023年6月8日
    00
  • Node.js 回调函数实例详解

    下面我将为你讲解Node.js回调函数的实例详解攻略。整个攻略将分为以下几个部分: Node.js回调函数的概念和作用 回调函数的常见用法 回调函数的实例应用及示例代码 回调函数的应用注意事项 总结 1. Node.js回调函数的概念和作用 回调函数是Node.js中一个非常重要的概念。在Node.js中,回调函数通常是异步函数的最后一个参数,用于处理异步操…

    node js 2023年6月8日
    00
  • NodeJS实现一个聊天室功能

    一、Node.js实现聊天室功能的攻略 Node.js可以帮助我们快速搭建一个聊天室的功能,以下是完成这个过程的步骤。 创建一个Node.js项目并初始化 首先,需要在你的电脑上安装 Node.js,然后我们可以在控制台中输入下列命令创建项目。 mkdir node-chatroom cd node-chatroom npm init -y 安装和配置web…

    node js 2023年6月8日
    00
  • Node.js服务器环境下使用Mock.js拦截AJAX请求的教程

    以下是详细讲解“Node.js服务器环境下使用Mock.js拦截AJAX请求的教程”的完整攻略。 什么是Mock.js? Mock.js是一个生成随机数据的库,可以用于模拟数据接口以方便前端开发测试及数据 mock。Mock.js支持随机生成文本、数字、日期、布尔、数组、对象等数据类型,而且可以根据模板生成指定数据。Mock.js还提供了api,能够与 ax…

    node js 2023年6月8日
    00
  • node连接mysql查询事务处理的实现

    在实现 Node.js 连接 MySQL 数据库的过程中,事务处理是一个非常重要的内容。通过使用事务,可以保证一组 SQL 操作的原子性以及一致性。下面是基本的实现步骤: 1.安装 MySQL 模块 npm install mysql –save 2.导入 mysql 模块 const mysql = require(‘mysql’); 3.连接 MySQ…

    node js 2023年6月8日
    00
  • Node.js的Koa框架上手及MySQL操作指南

    Node.js的Koa框架上手及MySQL操作指南 1. 什么是Koa框架? Koa是一个Node.js的Web框架,由Express的创造者TJ Holowaychuk在2013年创建。它具有轻量、简洁、灵活的特点,对ES6语法的支持也很好,是在Node.js平台下开发Web应用程序的良好选择。 2. Koa框架的安装及使用 要使用Koa框架,首先需要在本…

    node js 2023年6月8日
    00
  • javascript设计模式 – 迭代器模式原理与用法实例分析

    JavaScript设计模式 – 迭代器模式原理与用法实例分析 迭代器模式通常被用于遍历数据结构。该模式提供了一种自定义遍历的方式,同时屏蔽了底层数据结构的实现细节。在 JavaScript 中,迭代器模式通常被应用于处理数组和类似数据结构的数据。在本文中,我们将会深入讲解迭代器模式的原理,并结合两个实际例子帮助你更好的理解。 迭代器模式的原理 在 Java…

    node js 2023年6月8日
    00
  • node错误处理与日志记录的实现

    关于Node.js错误处理与日志记录的实现,我们可以分为以下几个步骤: 1. 使用try-catch捕获错误 在Node.js应用程序中,可以使用try-catch来捕获代码中的错误。try块中可能会抛出一个异常,catch块则用于处理异常。错误被抛出后,catch块将会被执行,并提供错误对象作为其参数。 try { // 可能会抛出异常的代码 const …

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