无法使用 Nest.js 设置 cookie

2023-12-26

我创造了/sign-in端点基本上返回带有 2 个令牌的对象 - 刷新令牌和访问令牌。

@Post('/sign-in')
signIn(@Body() signInUserDto: SignInUserDto): Promise<TokensDto> {
  return this.userService.signIn(signInUserDto);
}

我想做的是正常发送访问令牌JSON,但是将访问令牌作为 cookie 发送,所以我稍微改变了这个函数,使它看起来像这样。

@Post('/sign-in')
async signIn(
  @Request() req: ExpressRequest,
  @Response() res: ExpressResponse
): Promise<ExpressResponse<any, Record<string, any>>> {
  const { _at, _rt } = await this.userService.signIn(req.body);
  res.cookie('_rt', _rt, {
    httpOnly: true,
    sameSite: 'strict',
    maxAge: 7 * 24 * 60 * 60 * 1000
  });
  return res.status(200).json({ _at });
}

结果,我得到了访问令牌作为响应,但我没有得到 cookie 中的刷新令牌。我马上就能看出,在前端我有withCredentials: true在 axios 中。另外,当我使用邮递员向此端点发送请求时,我得到 cookie,但不是在前端。为什么会发生这种情况以及如何让它设置 cookie?

PS.

在服务器终端中,无论我如何从前端或邮递员发送请求,我都会收到此警告:

Error [ERR_INTERNAL_ASSERTION]: This is caused by either a bug in Node.js or incorrect usage of Node.js internals.
Please open an issue with this stack trace at https://github.com/nodejs/node/issues

    at assert (internal/assert.js:14:11)
    at ServerResponse.detachSocket (_http_server.js:223:3)
    at resOnFinish (_http_server.js:685:7)
    at ServerResponse.emit (events.js:314:20)
    at onFinish (_http_outgoing.js:735:10)
    at onCorkedFinish (_stream_writable.js:673:5)
    at afterWrite (_stream_writable.js:490:5)
    at afterWriteTick (_stream_writable.js:477:10)
    at processTicksAndRejections (internal/process/task_queues.js:83:21)

我能够解决这个问题,但只是部分解决。

问题出在前端,而不是后端,因为正如我之前所说,我能够使用邮递员从服务器获取 cookie。

这就是问题所在。

首先需要安装2个包cookie and @types/cookie,比,在路线中(正如我们所记得的,路由Next.js作为项目中的文件夹结构),您需要从已安装的包中导入序列化:

import { NextApiRequest, NextApiResponse } from "next";
import { AxiosError } from "axios";
import { api } from "../../../api";
import { serialize } from 'cookie'

export default async (
  req: NextApiRequest,
  res: NextApiResponse
) => {
  try {
    const { data } = await api.post('/user/sign-in', req.body)

    res.setHeader('Set-Cookie', serialize('_rt', data.data._rt, {
      httpOnly: true,
      sameSite: 'strict',
      maxAge: 7 * 24 * 60 * 60 * 1000
    }))
    return res.json(data)
  } catch (error) {
    return res
      .status((error as AxiosError).response?.status as number)
      .json((error as AxiosError).response?.data);
  }
}

结果,作为响应,您可以看到Set-Cookie带有 cookie 的标头,但是,这就是它部分解决的原因,我在 devtools 中没有看到这个 cookieApplication/Cookies部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 Nest.js 设置 cookie 的相关文章

  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • Socket.io - “套接字 ID”是否被视为敏感信息?

    我正在使用 Node js 和 socket io 实现一个简单的聊天应用程序 想知道在整个对象中共享所有客户端的套接字 ID 是否被认为是一个好的做法 为了解释一下 我的每个用户都是这样表示的 nick John Doe dateJoin
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 无法通过节点应用程序连接到redis,两者都在docker中

    我正在尝试将我的应用程序连接到 redis 但我得到 ioredis Unhandled error event Error connect ECONNREFUSED 127 0 0 1 6379 当我做 docker exec it ed
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • aws - 将字符串作为文件上传到 S3 存储桶

    我尝试使用适用于 NodeJS 的 AWS 开发工具包将字符串作为文件保存到 AWS S3 存储桶 PUT 请求成功 但文件未在 S3 存储桶中创建 以下是我的代码片段 const s3 new S3 apiVersion 2006 03
  • 在 iFrame 内维护会话状态

    不确定我是否疯了 但我在 iFrame 内的会话状态遇到问题 它是一个域在另一个域中的简单设置 我不需要跨域共享任何内容 我想做的就是将一个网站嵌入到另一个网站中 并且我希望该嵌入网站能够使用 cookie 会话状态登录 编辑 更新 等 为
  • node.js 本身还是 nginx 前端来提供静态文件?

    是否有更快的基准或比较 将 nginx 放在节点前面并让它直接提供静态文件或仅使用节点并使用它提供静态文件 nginx 解决方案似乎对我来说更易于管理 有什么想法吗 我不得不不同意这里的答案 虽然 Node 可以做得很好 但如果配置正确 n
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • 无法运行 npm install

    In here http devdocs magento com guides v2 0 frontend dev guide css topics css debug html它说要跑npm install 但是当我运行时出现此错误sud
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 如何循环 Record

    I have Records类型Record https www typescriptlang org docs handbook utility types html recordkt export interface List name
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • Mongoose - 查询从多个集合中获取数据

    我想要获取猫鼬的查询在 Node js 应用程序中 如下所述输出 user js comment js 和 post js 是我使用的模型文件 user js var mongoose require mongoose var Schema

随机推荐

  • Scrapy获取任何网站的所有链接

    我有以下 Python 3 网络爬虫代码 import requests from bs4 import BeautifulSoup import re def get links link return links r requests
  • C++ 使用构造函数参数初始化成员数组

    我有一个模板类 其中包含编译时常量长度的单个成员数组 我希望这个数组是常量 但根据构造函数提供的输入初始化它被证明很困难 struct Input int value template
  • 正则表达式:理解音节计数器代码

    我用过迪伦的问题 https stackoverflow com questions 5686483 how to compute number of syllables in a word in javascript这里关于 JavaSc
  • 加入位于不同 Docker 容器中的 serf 节点时出现问题

    上下文 主机是 AWS EC2 Ubuntu 14 04 5 带有 Docker 版本 17 05 0 ce 容器是根据公开可用的存储库映像构建的cbhihe serf alpine bash 所有容器都位于同一个 EC2 实例上 并与网络
  • 如何知道两个单词是否具有相同的词根?

    我想知道 在几种语言中 两个词是否是 要么同一个词 或同一个词的语法变体 例如 had and has具有相同的基础 在这两种情况下 它都是动词have city and cities具有相同的基数 went and gone具有相同的基数
  • Xcode 4 idekeybounds 一次击键可绑定多个命令

    拼命尝试自定义 Xcode 4 键绑定 我正在编辑用户 idekeybindings 文件 当打开时修改该文件 然后随后尝试通过键绑定界面进行更新时 xcode 有时会擦除该文件 可爱 我的理解是 提供一个命令 选择器 而不是仅仅一个字符串
  • bash:nano:在 Windows git bash 中找不到命令

    我在 Windows 电脑上使用 git 版本 2 7 0 windows 1 我使用了以下命令 nano README 结果我 bash nano command not found 现在如何将 Nano 文本编辑器安装到 git bas
  • 理解 main 的一个不常见的参数

    以下问题是在大学编程竞赛中给出的 我们被要求猜测输出和 或解释其工作原理 不用说 我们都没有成功 main write read 0 1 main 一些简短的谷歌搜索让我找到了这个确切的问题 在codegolf stackexchange
  • 正则表达式的含义如 - \\d , \\D, ^ , $ 等 [重复]

    这个问题在这里已经有答案了 这些表达的意思是什么 我在哪里可以了解它们的用法 d D s S w W t n etc 我需要使用stringr包 我完全不知道如何使用这些 From regexp 在里面扩展正则表达式部分 插入符号 和美元符
  • 子查询上的 Groupwise MAX()

    我正在尝试计算返回表中的最大值以及该表中的其他值 然而 我正在执行此操作的表不是 真正的 表 它是由子查询生成的表 这给我带来了问题 因为我认为在不重新指定整个子查询的情况下我无法连接它两次 我目前有一个 SQL Server 解决方案 使
  • React中继injectNetworkLayer不是一个函数

    我正在遵循 lynda 的教程 构建和部署全栈 React 应用程序 在 注入中继网络层 一章中 在index js中 尝试设置网络层 程序编译成功 但我在浏览器中收到以下错误 类型错误 WEBPACK IMPORTED MODULE 4
  • com.google.cloud.pubsub.spi.v1.Publisher.publish 未将数据发送到 PubSub

    对新版本的调用com google cloud pubsub spi v1 Publisher publish pubsubMessage get 永远挂着 我不确定问题是什么 代码片段 com google cloud pubsub sp
  • Dialogflow,从音频中检测意图

    我正在尝试将音频文件发送到对话流 API 进行意图检测 我已经有一个工作得很好的代理 但只能处理文本 我正在尝试添加音频功能 但没有成功 我正在使用此页面中提供的示例 Java https cloud google com dialogfl
  • Visual Studio 2017 中的 SSIS 工具箱缺少某些组件

    我在用Visual Studio Community 2017用于开发 SSIS 包 我使用 SQL Server 2016 某些组件不在 SSIS 工具箱中 这就是我现在拥有的 这是我的大学所拥有的 他们没有与我相同版本的 Visual
  • 如何在 Excel 中使用 VBA 从 SQLite 数据库检索数据?

    我正在使用 ADO 从 VBA 连接到 db 文件 遵循此问题的答案question https stackoverflow com questions 42509154 accessing a sqlite database in vba
  • 无法更改 Visual Studio 代码设置

    我尝试更改 Visual Studio 代码设置 但无法编辑任何内容 我应该怎么办 我想将编码设置为 files encoding ISO 8859 1 这些是我使用的步骤 1 Ctrl Shift p 打开命令面板2 搜索设置并单击首选项
  • onPrepareOptionsMenu 切换菜单项时如何刷新 ActionBar?

    在我的应用程序中 我经常启用 禁用菜单条目 并让它们从 onPrepareOptionsMenu 中可见 今天 我开始向我的一些 Android 2 x 应用程序添加 android showAsAction 菜单属性 以显示 Action
  • Grails 服务器发送事件

    我需要让服务器发送事件与 Grails 一起工作 我觉得我已经很接近了 但只是还不够 JavaScript 请求成功到达控制器 但每次都会抛出错误 它每隔 2 秒左右重试一次 可能是由于错误 当服务器的会话计时器低于 5 分钟时 我需要向用
  • CFML 使用哪个版本的 Hibernate?

    The 休眠文档 http hibernate org orm documentation 有时指不同版本之间的差异 ColdFusion 10 使用哪些版本的 Hibernate ColdFusion 9 中也是这样吗 Railo 稳定版
  • 无法使用 Nest.js 设置 cookie

    我创造了 sign in端点基本上返回带有 2 个令牌的对象 刷新令牌和访问令牌 Post sign in signIn Body signInUserDto SignInUserDto Promise