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

yizhihongxing

下面是针对实现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日

相关文章

  • node.js中的fs.rmdir方法使用说明

    下面是详细讲解“node.js中的fs.rmdir方法使用说明”的完整攻略。 一、什么是fs.rmdir方法? fs.rmdir()是Node.js中一个用于删除目录的内置方法。它可以删除空目录,并且不递归删除子目录。 二、fs.rmdir方法的语法 fs.rmdir()方法使用如下: fs.rmdir(path, callback) 其中: path:表示…

    node js 2023年6月8日
    00
  • 用Nginx反向代理Node.js的方法

    使用Nginx反向代理Node.js是一种常见的解决方案,可以提高网站的性能和可靠性,同时保护应用程序免受攻击。以下是使用Nginx反向代理Node.js的完整攻略: 1. 安装和配置Node.js应用程序 第一步是安装和配置Node.js应用程序。这里以Express框架为例进行说明: 步骤一:安装Node.js 可以从Node.js官网下载最新版本的No…

    node js 2023年6月8日
    00
  • 重学 JS:为啥 await 不能用在 forEach 中详解

    当我们使用 async/await 来处理异步函数时,有可能会遇到在 forEach 循环中使用 await 语句,导致 await 处理不完整的问题,这是因为 forEach 循环的特殊性导致的。 问题 forEach 循环是 JavaScript 提供的一种遍历数组的方式,常用于对数组中的每一项进行操作,语法如下: array.forEach(callb…

    node js 2023年6月8日
    00
  • Node.js实现爬取网站图片的示例代码

    下面是详细讲解Node.js实现爬取网站图片的示例代码的完整攻略。 什么是爬虫? 爬取网站图片是一种Web爬虫的应用,那么什么是爬虫呢?简单来说,爬虫就是通过模拟浏览器的方式去访问网站,并收集网站的数据。在收集数据的过程中,我们可以定位到需要的数据,去提取其中的有效信息。爬虫的应用非常广泛,可以用于数据挖掘、舆情分析、搜索引擎等多个领域。 推荐使用的第三方库…

    node js 2023年6月8日
    00
  • node将对象转化为query的实现方法

    将对象转化为query是在前端或后台请求时常见的操作,Node.js提供了将对象转化为query的实现方式。下面是完整攻略: 使用querystring模块 querystring模块提供了将对象转化为query的方法stringify()和将query转化为对象的方法parse()。 将对象转化为query: const querystring = req…

    node js 2023年6月8日
    00
  • 配置nodejs环境的方法

    当你准备开始使用Node.js时,需要事先配置好Node.js环境。在这里,我们提供了以下步骤来配置Node.js环境。 步骤1:下载Node.js 访问Node.js的官方网站,选择下载与你操作系统相对应的版本,双击下载后的安装包进行安装。 步骤2:确认Node.js是否安装成功 打开命令行窗口(Windows系统可使用cmd命令打开)输入node -v命…

    node js 2023年6月8日
    00
  • 安装node.js和npm的一些常见报错

    下面是安装node.js和npm的一些常见报错及其解决方案的完整攻略: 安装Node.js和npm常见报错及解决方案 报错1:执行node命令,提示“node不是内部或外部命令,也不是可运行的程序或批处理文件。” 这说明系统的环境变量中没有添加Node.js的安装路径。 解决方案:在系统的环境变量中添加Node.js的安装路径。 首先需要找到Node.js的…

    node js 2023年6月8日
    00
  • Node定时备份MySQL的实现

    下面是详细讲解“Node定时备份MySQL的实现”的完整攻略: 1. 操作系统环境 首先,Node定时备份MySQL需要在一个支持Node.js的操作系统环境下运行,例如Windows、macOS或Linux等。 2. 安装Node.js和npm 接下来,需要在操作系统中安装Node.js和npm。可以从Node.js官网下载安装程序并根据提示进行安装。 3…

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