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日

相关文章

  • 用C/C++来实现 Node.js 的模块(二)

    使用C++编写Node.js模块时,我们需要用到Node.js提供的C++ API,来实现对Node.js的各种操作。这里我们主要分为以下几个步骤: 1. 准备 首先,我们需要在本地安装Node.js环境,并且确定我们需要使用的Node.js版本。就像我们在Node.js中使用npm包管理工具一样,我们需要在C++模块中使用node-gyp工具来构建和编译我…

    node js 2023年6月8日
    00
  • JavaScipt中栈的实现方法

    JavaScript中栈的实现方法 什么是栈 栈(Stack)是一种遵循后进先出(LIFO)原则的一种数据结构,类似于一摞书或光盘。在栈中,进行插入操作的一段被称为栈顶,而进行删除操作的一端被称为栈底。 在JavaScript中,栈主要用于实现函数调用堆栈。当函数嵌套调用时,需要将当前函数的状态(变量、参数等)以及下一步要执行的指令等信息保存在栈中;当函数调…

    node js 2023年6月8日
    00
  • 说说如何利用 Node.js 代理解决跨域问题

    使用 Node.js 代理可以轻松解决跨域问题。跨域问题是由于浏览器的安全限制,不允许从一个源(协议、域名、端口)获取另一个源的资源。但是,如果服务器端使用 Node.js 代理涉及不同的源,那么跨域问题将不再是问题。 下面是两个示例说明: 基于 http-proxy-middleware 的 Node.js 代理 http-proxy-middleware…

    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
  • Node.js使用对话框ngDialog的示例代码

    Node.js是一个基于Chrome浏览器V8引擎的JavaScript后端运行环境,它具有事件驱动、非阻塞I/O的特点,适用于高并发、实时应用。而ngDialog是一款基于AngularJS实现的弹窗插件,它提供了简单易用、高度定制的UI界面解决方案,方便应用程序开发。 本文将详细讲解如何在Node.js中使用ngDialog的示例代码,过程中包含两个示例…

    node js 2023年6月8日
    00
  • 使用koa2创建web项目的方法步骤

    使用koa2创建web项目的方法步骤可以分为以下几步: 步骤一:安装Node.js 首先需要安装Node.js,可以在官网下载:https://nodejs.org/zh-cn/ 步骤二:安装koa2 安装koa2可以使用npm进行安装,在命令行中输入以下命令: npm install koa 步骤三:创建一个koa2项目 在命令行中输入以下命令,创建一个空…

    node js 2023年6月8日
    00
  • Vue虚拟dom被创建的方法

    在Vue中,虚拟DOM是由Vue内部的渲染函数或模板编译器创建的。创建虚拟DOM的方法有两种:手动使用渲染函数和自动使用模板编译器。 手动使用渲染函数 使用Vue提供的渲染函数可以手动的创建虚拟DOM。渲染函数是一个函数式组件,它接收一个用于描述组件模板的函数createElement作为参数,并返回一个表示组件VNode节点的JavaScript对象。下面…

    node js 2023年6月8日
    00
  • Windows环境下npm install 报错: operation not permitted, rename的解决方法

    当我们在Windows环境下使用npm进行包的安装时,有时候可能会遇到”operation not permitted, rename”的问题,这是因为Windows系统有时候会给文件锁定,从而导致文件重命名失败。下面我将为大家提供两种解决方法。 方法一:使用管理员权限打开命令行 打开命令行时,需要使用管理员权限。在Windows系统下有两种方法打开命令行。…

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