Node登录权限验证token验证实现的方法示例

Node登录权限验证token验证是一种常用的用户认证方式。下面是实现这种验证的方法示例:

1. 生成Token

在编写代码之前,需要首先使用node.js的jsonwebtoken模块生成一个Token字符串。示例代码如下:

const jwt = require('jsonwebtoken');

// 生成Token的函数
function generateToken(user) {
  const payload = {
    sub: user.id,
    iat: Date.now()
  };
  const options = {
    expiresIn: '24h'
  };
  const secret = 'ThisIsASampleSecretKey';
  return jwt.sign(payload, secret, options);
}

在这个例子中,generateToken函数接收一个用户对象user,通过使用jsonwebtoken生成一个JWT Token字符串。这个函数使用了一个SecretKey,SecretKey是一个可以保证Token字符串安全的唯一密钥,因此需要在生成Token的时候设置一个SecretKey。

2. 校验Token

代码中有一个需要保证的功能是登录用户后的请求只有拥有有效Token的用户才可以访问。下面是一个示例,该示例代码用于校验Token的有效性:

const jwt = require('jsonwebtoken');

// 安全验证中间件函数,用于校验Token的有效性
function verifyToken(req, res, next) {
  const authHeader = req.headers.authorization;
  if (!authHeader) {
    return res.sendStatus(401);
  }

  const token = authHeader.split(' ')[1];

  jwt.verify(token, 'ThisIsASampleSecretKey', (err, user) => {
    if (err) {
      return res.sendStatus(403);
    }

    req.user = user;
    next();
  });
}

这个中间件函数用于校验Token的有效性,首先要从请求头中提取Token字符串。如果请求头中没有Authorization字段或者无效,则返回状态码401,表示访问被拒绝。如果Token字符串能够被提取,那么使用jsonwebtoken的verify函数进行Token验证。由于校验Token的函数是一个异步函数,所以使用了回调函数来处理验证结果,如果Token无效则返回状态码403。如果Token是有效的,则请求对象req将存储用户对象user,该对象可以被传递到下一个处理程序。

3. 示例说明

以下是两个示例说明,用于演示如何在Express.js框架中实现这种Token验证方式。

示例1

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

const app = express();
const port = 3000;
const secret = 'ThisIsASampleSecretKey';

// 安全验证中间件函数,用于校验Token的有效性
function verifyToken(req, res, next) {
  const authHeader = req.headers.authorization;
  if (!authHeader) {
    return res.sendStatus(401);
  }

  const token = authHeader.split(' ')[1];

  jwt.verify(token, secret, (err, user) => {
    if (err) {
      return res.sendStatus(403);
    }

    req.user = user;
    next();
  });
}

// 模拟用户登录接口
app.post('/login', (req, res) => {
  // 此处省略验证用户登录信息的代码
  const user = { id: 1, username: 'testuser' };

  const token = jwt.sign({ sub: user.id }, secret, { expiresIn: '24h' });

  res.json({ token });
});

// 需要进行安全验证的API接口
app.get('/api/posts', verifyToken, (req, res) => {
  res.json({ message: '您已登录用户' });
});

// 在本地启动服务器
app.listen(port, () => {
  console.log(`Server started at http://localhost:${port}`);
});

在这个示例中,首先是一个/post/login路由,用于用户登录。当用户通过POST /login路由提交登录凭证时,应用程序将检查用户凭证,并如果凭证通过验证,则使用jsonwebtoken模块生成一个Token,并将Token返回给客户端。

其次,还有一个/api/posts路由,用于对请求进行安全验证。当没有有效的Token或者Token不正确时,该路由将会返回403状态码。如果Token正确,则返回一个JSON字符串。

示例2

另一个示例是在Express.js应用程序中使用jsonwebtoken模块的更直接的实现。以下代码片段演示了如何在Express.js应用程序中使用jsonwebtoken模块。

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

// 安全验证中间件函数,用于校验Token的有效性
function verifyToken(req, res, next) {
  const token = req.headers['x-access-token'];
  if (!token) {
    return res.status(403).send({ 
      message: '请提供有效Token' 
    });
  }

  jwt.verify(token, config.secret, (err, user) => {
    if (err) {
      return res.status(401).send({
        message: 'Token无效,请重新登录'
      });
    }
    req.user = user;
    next();
  });
};

// 用于验证用户登录的路由
app.post('/api/login', (req, res) => {
  const {username, password} = req.body;
  const user = {
    id: 1,
    username,
    password
  };
  // 用户凭证验证省略
  const token = jwt.sign({ id: user.id }, config.secret, {
    expiresIn: 86400 // 24小时过期时间
  });
  res.status(200).send({
    auth: true,
    token
  });
});

// 需要进行安全验证的API
app.get('/api/user', verifyToken, (req, res) => {
  res.status(200).send(req.user);
});

// 在本地启动服务器
app.listen(3000, () => {
  console.log('Server running on port 3000');
});

在这个示例中,取代了调用verifyToken的中间件函数。在路由中直接使用verify函数进行身份验证,并返回相应的状态码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node登录权限验证token验证实现的方法示例 - Python技术站

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

相关文章

  • Node.js中同步和异步编程的区别及使用方法

    Node.js是基于Chrome V8引擎的JavaScript运行环境,具有非常强大的异步IO处理能力。在Node.js中,同步和异步是编程中非常重要的两个概念,理解它们的区别以及使用方法对于Node.js的开发者来说是至关重要的。 同步和异步的区别 同步是指任务按照顺序依次执行,前一个任务执行完毕后,才能执行后一个任务。而异步是指同时执行多个任务,不需等…

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

    当我们在编写 Node.js 代码时,经常需要拼接不同的路径,这时使用 path.resolve 方法可以非常方便地实现路径拼接和处理,使得路径的操作更加易于维护和扩展。下面,我将为大家详细介绍 path.resolve 方法的使用说明。 1. 方法介绍 path.resolve 方法是 Node.js 提供的基础模块 path 的一个方法,它可以将多个参数…

    node js 2023年6月8日
    00
  • 如何手动实现一个 JavaScript 模块执行器

    下面我将为你详细讲解”如何手动实现一个JavaScript模块执行器”的攻略。 什么是JavaScript模块执行器 JavaScript模块执行器是用来将JavaScript代码模块化的一种工具。它可以自动处理模块的依赖关系,确保每个模块都会按照正确的顺序加载,并且只会加载一次,从而避免了命名冲突和重复加载的问题。在ES6出现之前,JavaScript模块…

    node js 2023年6月8日
    00
  • Node.js发起HTTP请求的6种不同方法小结

    针对“Node.js发起HTTP请求的6种不同方法小结”这个话题,我将按照标准的markdown格式撰写完整攻略。具体内容如下: Node.js发起HTTP请求的6种不同方法小结 发起HTTP请求在Node.js中是一个非常常见的操作,Nodejs提供了各种不同的方法来进行HTTP请求,本篇攻略将为大家介绍Node.js中发起HTTP请求的6种不同方法。 1…

    node js 2023年6月8日
    00
  • Angular Renderer (渲染器)的具体使用

    Angular Renderer 是 Angular 的一个基础设施,它是与 DOM 交互的方便的方式。使用 Renderer 可以将组件与底层的 DOM 的具体实现(例如 Angular 所使用的正常 DOM 和 Web Worker 的缺失 DOM)解耦。渲染器可以帮助你在渲染的时候实现跨平台兼容性,例如有一些渲染器支持在 Angular 中使用 Nat…

    node js 2023年6月8日
    00
  • node + multer 实现文件上传过程

    下面是关于使用 node + multer 实现文件上传的攻略: 1. 安装和引入 multer Multer 是一个处理文件上传的 node.js 中间件。首先需要在命令行中使用 npm 安装 multer 包: npm install multer –save 安装完成后,在 Node.js 脚本中引入 multer: const multer = r…

    node js 2023年6月8日
    00
  • 基于Node.js的大文件分片上传示例

    下面是“基于Node.js的大文件分片上传示例”的完整攻略及两条示例说明。 简介 当上传大文件时,可能会遇到一些问题,例如网络不稳定、上传时间长等。大量数据上传时,还需要使用分片上传技术,避免将整个文件发送到服务器。在这里,我们将介绍如何使用Node.js实现大文件分片上传。 实现步骤 安装依赖 首先,我们需要先安装依赖包,这里我们使用multiparty和…

    node js 2023年6月8日
    00
  • 详解nodejs 文本操作模块-fs模块(四)

    详解nodejs 文本操作模块-fs模块(四) 在 nodejs 中,fs 模块是处理文件和目录的核心模块。在读取或写入文本数据时,fs 模块提供了多种方法和选项。本文将详细讲解如何使用 fs 模块进行文本操作。 读取文本文件 使用 fs.readFile() 方法可以读取文本文件。该方法包含三个参数:文件路径、编码格式和回调函数。例如,下面的示例将读取指定…

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