浅谈node使用jwt生成的token应该存在哪里

当使用 Node.js 程序生成 JSON Web Token (JWT) 时,您需要决定如何存储生成的 token。根据您的具体情况和需求,您可以将 jwt 存储在 cookies、localStorage 中,或者作为 Authorization 头在 HTTP 请求中发送。

以下是三种存储 jwt 的方式:

存储在Cookie中

当您将 Token 存储在 Cookie 中时,每次 HTTP 请求都会自动附加 Cookie。这意味着您不需要手动添加 Authorization 标头或 localStorage,但在使用 HttpOnly 标记时,无法通过 JavaScript 访问 Token。

const jwt = require('jsonwebtoken');
const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

app.get('/login', (req, res) => {
  // 登录逻辑
  const user = { id: 1, name: 'test' };
  const token = jwt.sign({ user }, 'secret_key');
  res.cookie('jwt', token, { httpOnly: true });
  res.send('You are logged in!');
});

app.get('/dashboard', (req, res) => {
  const token = req.cookies.jwt;
  if (!token) return res.status(401).send('Access Denied');
  try {
    const verified = jwt.verify(token, 'secret_key');
    req.user = verified.user;
    res.send('Welcome to dashboard, ' + req.user.name + '!');
  } catch (err) {
    res.status(400).send('Invalid Token');
  }
});

存储在LocalStorage中

将 Token 存储在 LocalStorage 中意味着您需要通过 JavaScript 手动添加 Authorization 头。

const jwt = require('jsonwebtoken');
const axios = require('axios');

// 登录逻辑
const user = { id: 1, name: 'test' };
const token = jwt.sign({ user }, 'secret_key');
localStorage.setItem('jwt', token);

// 请求携带 Token
axios.get('/dashboard', {
  headers: { Authorization: 'Bearer ' + localStorage.getItem('jwt') }
})
  .then(res => console.log(res))
  .catch(err => console.error(err));

存储在请求头中

最后一种方案是使用请求头作为 Token 的存储方式。这种方法可以防止跨站点请求攻击 (CSRF),但需要手动添加 Authorization 头。

const jwt = require('jsonwebtoken');
const axios = require('axios');

// 登录逻辑
const user = { id: 1, name: 'test' };
const token = jwt.sign({ user }, 'secret_key');

// 请求携带 Token
axios.get('/dashboard', {
  headers: { Authorization: 'Bearer ' + token }
})
  .then(res => console.log(res))
  .catch(err => console.error(err));

这三种方案都有各自的优缺点,您可以根据自己的需求选择最适合您的方案。无论选择哪种方案,都需要确保 Token 保密且仅由合格的实体使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈node使用jwt生成的token应该存在哪里 - Python技术站

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

相关文章

  • Node.JS如何实现JWT原理

    JWT(JSON Web Token)是一种开放标准,它允许将信息作为 JSON 对象进行安全地传输。JWT 在身份验证和授权应用程序中得到广泛使用。Node.js 提供了各种库和模块来实现 JWT,包括 jsonwebtoken 和 express-jwt。下面是使用 Node.js 实现 JWT 的过程步骤。 步骤1:安装所需库 首先,我们需要安装所需的…

    node js 2023年6月8日
    00
  • 利用NodeJS和PhantomJS抓取网站页面信息以及网站截图

    要利用 NodeJS 和 PhantomJS 抓取网站页面信息以及截图,需要经过以下步骤: 安装 NodeJS 和 PhantomJS 首先需要在本地电脑安装 NodeJS 和 PhantomJS。NodeJS 安装可以前往官网下载对应版本,PhantomJS 安装可以通过以下命令下载到本地: brew install phantomjs # 或者 npm …

    node js 2023年6月8日
    00
  • JavaScript 运行机制详解再浅谈Event Loop

    JavaScript 运行机制详解再浅谈Event Loop 什么是JavaScript运行机制? 首先,我们需要了解JavaScript的运行机制。JavaScript在浏览器中是单线程运行的,也就意味着只有一个调用栈。JavaScript中的所有代码都是在主线程上运行的,当代码执行时,会在调用栈上创建一个执行环境,函数返回时,执行环境会被弹出调用栈。 什…

    node js 2023年6月8日
    00
  • Node.js的基本应用你知道多少

    Node.js的基本应用攻略 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它能使JavaScript代码运行在服务器端。下面将介绍使用Node.js的基本应用。 安装Node.js 要使用Node.js,需要首先在计算机上安装它。可以在官网https://nodejs.org/上下载相关的安装程序。安装完成后,可以通过以下命…

    node js 2023年6月8日
    00
  • 详解JavaScript 为什么要有 Symbol 类型?

    下面是详解“详解JavaScript 为什么要有 Symbol 类型?”的完整攻略。 一、为什么要有 Symbol 类型? 在 JavaScript 中,对象的属性名通常是字符串类型的。当我们定义两个同名属性时,后一个属性会覆盖前一个属性。但是,有些场景需要我们定义一些唯一的属性名,避免重复。这时,Symbol 类型就可以派上用场了。Symbol 类型是一种…

    node js 2023年6月8日
    00
  • 详解如何使用node.js的开发框架express创建一个web应用

    使用Node.js的开发框架Express创建Web应用,可以帮助我们快速搭建出一个具备完整功能的Web应用程序。以下是使用Express创建Web应用的攻略: 1. 安装Express 在终端输入以下命令来安装Express: npm install –save express 2. 创建应用 我们可以通过以下代码来创建一个Express应用: cons…

    node js 2023年6月8日
    00
  • Node.js中的events事件模块知识点总结

    Node.js中的events事件模块知识点总结 什么是事件? 事件是Node.js中的一种机制,用于处理异步操作。当某个任务完成时,会触发一个事件,并调用相应的事件处理函数进行处理。Node.js的事件机制基于观察者模式(Observer Pattern),主要由 事件触发器(EventEmitter) 和 事件监听器(EventListener) 两部分…

    node js 2023年6月8日
    00
  • 在node中如何使用 ES6

    在 Node 中使用 ES6 有以下几步: 步骤1:安装对应版本的 Node 首先,要确保安装的 Node 版本兼容 ES6 的语法。如果安装的是旧版本的 Node,则无法使用 ES6。 可以在 Node 的官方网站(https://nodejs.org/zh-cn/)下载最新的 LTS 版本。或者使用 Node 版本管理器 nvm(https://gith…

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