当前位置: 首页 > news >正文

cookie信息无法获取问题研究

背景

在oneapi这个前后端都有的开源项目中,我想接入chatnextweb到oneapi的后端。

由于需要二开chatnextweb,添加登录注册功能,考虑到java后端的性能问题和内存占用,决定不重启写个服务,而是将登录注册接入到oneapi的登录注册api,没错,和oneapi的前端公用一套登录注册

熬了个大夜后,终于对接好了登录注册,并且数据写成功的流转了起来。

就在我以为没问题的时候,问题来了,前端在使用登录后的功能时,自动跳转到了登录页面,没错,前端判定当前页面出于未登录的状态。于是麻烦的debug开始了......

问题分析过程

梳理了一遍前端代码逻辑,关于是否登录的判断取决于token是否为空,在登录后,前端会将获取到了token暂存

紧接着在调用其他登录后的界面时,前端判断token是否为空,如果为空就不展示,并且跳转到登录界面,以下截图效果差不多,虽然没有登录跳转逻辑,但也放上来了

经过debug后,发现后端返回的token为空,梳理了后端代码,发现后端的鉴权是通过cookie和session,前端是通过token,但是问题不大,后端在注册时也会生成token,只需要调用获取token的接口即可。

于是我这么做了,新的问题也这么来了,鉴权失败,后端解析cookie里面的用户数据,解析为空.......

又分析了一波后端代码,发现在登录时,后端会将用户信息封装到session里面,然后保存到cookie中

最后封装后的cookie是这样的:

session=MTY5NTAwNTA3N3xEWDhFQVFMX2dBQUJFQUVRQUFCc180QUFCQVp6ZEhKcGJtY01CQUFDYVdRRGFXNTBCQUlBQWdaemRISnBibWNNQ2dBSWRYTmxjbTVoYldVR2MzUnlhVzVuREFZQUJISnZiM1FHYzNSeWFXNW5EQVlBQkhKdmJHVURhVzUwQkFNQV84Z0djM1J5YVc1bkRBZ0FCbk4wWVhSMWN3TnBiblFFQWdBQ3y5yImQjaV60qV8krs0fEG0tfGUzIu6sOCXYOTtpJaUlw==; Path=/; Expires=Wed, 18 Oct 2023 02:44:37 GMT; Max-Age=2592000

那么为什么会解析为空呢?oneapi自带的前端能正常解析,但新接入的前端解析就为空,为什么呢?网上给出的答案是因为跨域了,导致传入的cookie是新的cookie,所以没有数据,抱着怀疑的态度,我在后端写了一个获取cookie中用户数据的接口,并通过postman进行调用,尝试验证传入的cookie。

果然,网上果然不是很靠谱,用户数据成功解析,传入的cookie没有问题。

继续分析,说是非同源跨域导致的,cookie无法传入到后端,我想了想,前端调用localhost:3001/getCookie,然后转发到localhost:3000/getCookie,确实是非同源跨域,于是有了两种解决方案

  1. 使用代理
  2. 手动传入Cookie

使用代理

按照oneapi前端设置代理的方法进行设置,发现不可行,暂时放弃这条思路(感觉深究下去,使用代理是一定可行的,比如使用nginx等。)

手动传入Cookie

主要是想尝试一下手动传入Cookie,因为有大佬说它就是采用这种方案

居然还是解析失败,这就奇怪了

除了手动传入cookie,我还尝试添加 credentials: 'include',作用是即使跨域,也能成功传入cookie,但也不行

于是又开始了debug的过程,看了很多篇博客后,找到一个思路可行的,说后端需要配置跨域访问,记得之前看到过后端跨域的代码,又翻出来看了看,发现了问题:

func CORS() gin.HandlerFunc {config := cors.DefaultConfig()config.AllowAllOrigins = trueconfig.AllowCredentials = trueconfig.AllowMethods = []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}config.AllowHeaders = []string{"*"}return cors.New(config)
}func DefaultConfig() Config {return Config{AllowMethods:     []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},AllowHeaders:     []string{"Origin", "Content-Length", "Content-Type"},AllowCredentials: false,MaxAge:           12 * time.Hour,}
}

问题就出在 AllowCredentials: false, 这一行,chatgpt告诉我,这代表了后端设置了不允许跨域认证,就是说你可以跨域,但不可以认证鉴权

所以前端调用不管是 手动传入cookie,还是添加 credentials: 'include',都不行,因为跨域了。

那么解决办法就很明显了,不要让它跨域,又得出了两个解决方案,使用代理,或者写全url。

关于写完整domain(就是url)

如果不写全量url,最后访问的是3001,也就是前端地址,然后前端再通过next等某些操作进行转发到3000(没细看),也就导致了非同源

所以需要写完整domain,并且可以不用手动传cookie

fetch('http://localhost:3000/api/user/token', {method: 'GET',headers: {"Content-Type": "application/json",},
})

总结

成功传入cookie的方案总结:

  1. 使用代理
  2. 使用全量domain

相关文章:

cookie信息无法获取问题研究

背景 在oneapi这个前后端都有的开源项目中,我想接入chatnextweb到oneapi的后端。 由于需要二开chatnextweb,添加登录注册功能,考虑到java后端的性能问题和内存占用,决定不重启写个服务,而是将登录注册接入到oneapi的…...

Linux:冯诺依曼系统和操作系统的概念

文章目录 冯诺依曼体系结构冯诺依曼体系的理解 操作系统操作系统的基本定位操作系统的理解1 操作系统的理解2总结 本篇主要总结的是操作系统的基本认知和一些概念 冯诺依曼体系结构 那么上图表示的就是冯诺依曼体系结构,那这个体系结构是什么?为什么要先…...

【操作系统笔记十一】进程间通信

Linux文件系统 inode 节点 (index node):给每个文件赋予一个称为 i 节点的数据结构。 inode 一开始是存储在硬盘中的,只有当文件被打开的时候,其对应的 i 节点才加载到内存中。 总结: Linux 中&#xff0c…...

【操作系统】聊聊Linux软中断

什么是中断 中断是系统用来响应硬件设备请求的一种机制,会打断进程的正常调度和执行,转而去执行内核中的中断处理程序。 比如你正在看书,你女朋友叫你出去逛街。你就需要先放下手里的事情,然后逛街。回来之后,在接着看…...

公众号迁移个人可以迁移吗?

公众号账号迁移的作用是什么?只能变更主体吗?很多小伙伴想做公众号迁移,但是不知道公众号迁移有什么作用,今天跟大家具体讲解一下。首先公众号迁移最主要的就是修改公众号的主体了,比如我们公众号原来是A公司的&#x…...

全国职业技能大赛云计算--高职组赛题卷⑤(容器云)

全国职业技能大赛云计算--高职组赛题卷⑤(容器云) 第二场次题目:容器云平台部署与运维任务2 基于容器的web应用系统部署任务(15分)任务3 基于容器的持续集成部署任务(15分)任务4 Kubernetes容器…...

支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答

很多投资者都知道,Renko图表和普通日本烛台都会采用相同的交易信号,即支撑位和阻力位。那么支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答。 这些信号在任何时间框架上都会出现,且在蜡烛图交易中颇受欢迎。对于Renko图表而言…...

如何在32位MCU用printf()函数打印64位数据

1. 在32位MCU上定义64位变量: unsigned long long time_base; unsigned long long temp_time;2. 调用打印函数: printf("RFID:time_base:%d\r\n",time_base); printf("RFID:temp_time:%d\r\n",temp_time); printf("RFID:Ru…...

Python爬虫程序设置代理常见错误代码及解决方法

Python爬虫程序设置代理是爬虫程序中常用的技巧,可以有效地绕过IP限制,提高爬虫程序的稳定性和效率。然而,在设置代理时,常会出现各种错误代码,这些错误代码可能会影响程序的正常运行,甚至导致程序崩溃。本…...

3D点云目标检测:Centerformer训练waymo数据集

一、环境准备 项目地址:centerformer 1.0、基础环境 python 3.8.0 torch 1.9.1cu111 waymo-open-dataset-tf-2-6-0 1.4.9 spconv 1.2.1 其余按照requirement.txt里安装就行 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt由于我本人是在…...

火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 自上世50年代,以“计算机”作为代表性象征的信息革命开始,社会对于先进生产力的认知便开始逐步更迭——从信息化(通常认为是把企…...

windows上配置vscode C/C++代码跳转

windows上配置vscode C/C代码跳转 安装插件 C/C 官方的 C/C 插件,必备的插件,是代码跳转、自动补全、代码大纲显示等功能的基础。 Gtags C/C GNU Global GNU Global除了安装该插件之外,还需要在本地下载安装GNU Global工具。多看下插件…...

【Xilinx】基于MPSoC的OpenAMP实现(一)

【Xilinx】基于MPSoC的OpenAMP实现(一) 一、开发环境1、开发思路2、下载官方bsp包 二、编译Linux1、配置petalinux环境变量2、创建工程3、进入目录4、设置缓存目录(重点:可离线编译,加快编译速度)5、配置u-…...

代码随想录算法训练营总结篇|完结撒花

完结撒花,真不敢相信60天坚持下来了。 算法一直是我的超级超级弱项,属于小白中的小白。一开始是想自己刷的,打开leetcode第一题,吼哟好家伙,梦开始的地方直接破碎。之前刷B站的时候就有学习up推荐算法可以看看代码随想…...

uniapp、vue实现滑动拼图验证码

uniapp、vue实现滑动拼图验证码 实际开发工作中,在登陆的时候需要短信验证码,但容易引起爬虫行为,需要用到反爬虫验证码,今天介绍一下拼图验证码,解决验证码反爬虫中的滑动验证码反爬虫。滑动拼图验证码是在滑块验证码…...

【ArcGIS】土地利用变化分析详解(矢量篇)

土地利用变化分析详解-矢量篇 土地利用类型分类1 统计不同土地利用类型的面积/占比1.1 操作步骤Step1:Step2:计算面积Step3:计算占比 2 统计不同区域各类土地利用类型的面积2.1 操作步骤 3 土地利用变化转移矩阵3.1 研究思路3.2 操作步骤 4 分…...

VS2022创建控制台应用程序后没有Main了,如何显示Main?

文章目录 问题描述原因解决方案简单的顶级语句试用计算器 其他文章 问题描述 用VS2022创建一个控制台应用后,没有名称空间和Main函数了,只有一个WriteLine,如下所示。 // See https://aka.ms/new-console-template for more information Co…...

当当网商品详情数据接口

当当网商品详情数据接口可以通过当当网的开放平台获取相关信息。您可以注册当当开放平台账号,并按照要求提交申请获取API接口的调用凭证。获得授权后,您将会收到一组AccessKey和SecretKey。使用编程语言(如Java)调用API接口&#…...

ultraEdit正则匹配多行(xml用)

在ultraEdit中&#xff0c;我想选取<channel到</channel>之间的多行&#xff08;进行删除&#xff09;。在perl模式下&#xff0c;命令为“<channel[\s\S]?</channel>”。下面是xml文件&#xff1a; <!--This XML file does not appear to have any sty…...

Mac上的utools无法找到本地搜索插件

utools安装地址 utools本地搜索用法 目前本地搜索只在win下&#xff0c;mac无福了 Mac可用cmdspace方法使用聚焦搜索&#xff0c;来搜索本地文件...

深入浅出DPCM与DAPM:图解高通音频架构如何实现动态功耗管理与低延迟播放

深入浅出DPCM与DAPM&#xff1a;图解高通音频架构如何实现动态功耗管理与低延迟播放 在智能穿戴设备和移动终端领域&#xff0c;音频系统的功耗优化一直是工程师面临的重大挑战。想象一下&#xff0c;当你的智能手表在待机状态下播放通知铃声时&#xff0c;如果每次都需要唤醒主…...

NV170D语音芯片在智能锁离线语音交互中的工程实践

1. 项目概述&#xff1a;当智能锁“开口说话”智能锁这东西&#xff0c;现在家里、公寓、办公室基本都普及了。从最早的密码、指纹&#xff0c;到现在的刷脸、手机NFC&#xff0c;解锁方式越来越花哨。但不知道你有没有过这样的体验&#xff1a;大晚上回家&#xff0c;楼道灯暗…...

通过 curl 命令快速测试 Taotoken 大模型接口连通性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过 curl 命令快速测试 Taotoken 大模型接口连通性 在接入大模型服务时&#xff0c;直接使用 curl 命令进行接口测试是一种高效且…...

PHP主流框架

PHP主流框架概述 PHP作为广泛使用的服务器端脚本语言,拥有多个成熟的开发框架,适用于不同规模和类型的项目。以下是当前主流的PHP框架及其特点: Laravel Laravel是目前最流行的PHP框架之一,以其优雅的语法和丰富的功能著称。它提供了强大的路由系统、ORM(Eloquent)、模…...

高性能自动化网页信息提取工具实战指南:大规模目标扫描与安全检测技术方案

高性能自动化网页信息提取工具实战指南&#xff1a;大规模目标扫描与安全检测技术方案 【免费下载链接】URLFinder 一款快速、全面、易用的页面信息提取工具&#xff0c;可快速发现和提取页面中的JS、URL和敏感信息。 项目地址: https://gitcode.com/gh_mirrors/ur/URLFinder…...

用C语言链表实现一个简易图书管理系统(附完整源码)

从零构建C语言链表图书管理系统&#xff1a;工程化实践指南 当你第一次在数据结构课本上看到链表时&#xff0c;是否觉得这些抽象的概念离实际开发很遥远&#xff1f;作为C语言初学者&#xff0c;我完全理解这种困惑——直到亲手用链表实现了一个真正的图书管理系统。本文将带你…...

高效流感病毒A抗体:制备方法与免疫防御利器

流感病毒A&#xff08;Influenza Virus A&#xff09;&#xff0c;简称FluA&#xff0c;作为常见的呼吸道病毒&#xff0c;每年都会在全球范围内引发季节性流感爆发。它具有高度的变异性&#xff0c;能够不断进化出新的亚型&#xff0c;使得人群对其普遍易感。流感不仅会导致发…...

深度解析Real-ESRGAN:6B轻量模型实现专业级图像超分辨率

深度解析Real-ESRGAN&#xff1a;6B轻量模型实现专业级图像超分辨率 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN Real-ESRGAN_…...

从《魔兽世界》到你的项目:深入拆解Recast导航网格生成与优化的全流程

从《魔兽世界》到现代项目&#xff1a;Recast导航网格技术的深度实践指南 1. 导航网格技术的演进与核心价值 2004年《魔兽世界》的发布不仅是MMO游戏史上的里程碑&#xff0c;更悄然改变了游戏AI寻路技术的演进轨迹。当数百万玩家在艾泽拉斯大陆自由探索时&#xff0c;鲜少有人…...

5种文本切块策略大解析:从字符到语义,打造高效检索系统!

文本切块是构建向量索引前的重要环节&#xff0c;避免语义切断和检索效果冲淡。文章详细解析了五种常见切块策略&#xff1a;按字符长度切分、按Token长度切分、按句子语义切分、按段落结构切分&#xff08;含默认语法和自定义语法&#xff09;以及混合方式切分。每种策略都有其…...