nodejs+express重定向

news2024/11/20 16:27:41

前言:

本篇代码中需要安装的依赖包包括:requestexpress

1.常用重定向方法

nodejs中的重定向可以使用.redirect()方法,该方法中可以传两个参数:code和path,code指重定向时,当前访问的这个接口的返回码301或302,为非必选参数;path指重定向的地址,必填参数。一般情况下,可以不指定code码直接重定向,这时,重定向的响应码默认为302。所以,重定向可以有两种写法:res.redirect(code, path)res.redirect(path)

2.前端伪造重定向

在实际使用中经常会遇到一些不可预知的状况。如本次文中在重定向时就遇到了这样的情况:nodejs在后台触发重定向到某个地址,浏览器会自动对这个url做一次options校验,options请求返回了403导致流程终止。这就导致我们的重定向无法完成。

针对这种情况,我们想了另外一种方式:那就是,后端在判断到需要重定向后,返回一个能够识别的响应,让前端来做跳转。具体的流程为:

  • 后端封装用于识别重定向的响应
  • 前端获取到结果,伪造重定向

实现方法为:

  1. 后端封装重定向响应
request.get(`request-url`, function(error, response, body) {
    if(!error && response.statusCode === 200) {
        next()
    } else if(response.statusCode === 401) {
        const data = {
            "code": 401,
            "authUrl": url,
            "status": "redirect"
        }
        res.send(data)
    }
})

request-url是一个判断用户是否有权限的接口。在本示例中,如果该接口的响应没有报错且响应的状态码是200,那么,express执行next中间件(next是从上一个方法中传入的);如果状态码不是200(401是request-url接口给出的错误状态码,调用不同接口需求确定该状态码为多少),会封装一个data对象,通过res.send(data)响应给浏览器。

在data对象中,code是状态码,status是状态标识,前端通过code和status一起进行判断是否重定向。url是重定向的地址

  1. 前端伪造重定向
if (code === 401) {
  letdata = res.data
  if(data.status === 'redirect') {
    window.location.href = data.authUrl
    return
  }
}

可以看到,前端伪造重定向的依据是:code等于401且status为redirect。制造重定向的方法是使用window.location.href方法。这样,当访问到某个接口发现不满足条件时,就可以自动跳转到指定地址,完成了重定向。

3.特别情况说明

在本例中,重定向的是一个页面的地址,一个站点资源,如https://xxx/#/index的格式。

PS:注意/#/index,这是前端路由经典的webHash模式。

我们拼接的重定向跳转地址是:https://aaa.com?params=params&redirect_url=https://xxx/#/index,定义为redirectUrl。

可以看到,我们将redirect_url=https://xxx/#/index拼接到了https://aaa.com?params=params的后面。

出现的问题是:当我们通过浏览器window.location.href跳转时,浏览器地址栏中出现的是如下图所示的地址,#/index后缀丢失了:
在这里插入图片描述
出现这种问题的结果是什么呢?

在vue框架中,我们通过to.query获取不到?后面的参数,导致后续的一些工作无法开展。

怎么解决呢?

使用encodeURIComponent,将路径进行编码,访问就正常了。如本例中,我们在拼接redirect_url=https://xxx/#/index后的https://xxx/#/index时,以这种方式操作:

let url = "https://xxx/#/index"
let redirectUrl = encodeURIComponent(url )

这样一操作,在浏览器了就可以正常访问了。一些实现正常~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20.2 设备树中的 platform 驱动编写

一、设备树下的 platform 驱动 platform 驱动框架分为总线、设备和驱动,总线不需要我们去管理,这个是 Linux 内核提供。在有了设备树的前提下,我们只需要实现 platform_driver 即可。 1. 修改 pinctrl-stm32.c 文件 先复习一下 pinctrl 子系…

C 语言多维数组

C 语言多维数组 在本教程中,您将借助示例学习使用多维数组(二维和三维数组)。 在C语言编程中,您可以创建一个数组数组。这些数组称为多维数组。例如, float x[3][4];这x是二维(2d)数组。该数…

14——1

这句话的意思是,如图中月份12天数23时,就是1223;当月份9天数2时,就是0902. 可以看到在上面给出的数组元素中,并没有连续挨在一起的2023数字元素——就有人可能输出答案0。 所以这里要看一下—— ——子序列的含义&…

网络运维Day16

文章目录 Docker简介什么是容器命名空间: Docker 的优缺点 Docker安装Docker镜像管理什么是镜像镜像管理 Docker容器管理运行容器容器启动、停止、重启拷贝文件进入容器容器与应用 DockerfileDockerfile 语法案例 总结 Docker简介 什么是容器 容器是用来装东西的&a…

诡异的bug之dlopen

序 本文给大家分享一个比较诡异的bug,是关于dlopen的,我大致罗列了我项目中使用代码方式及结构,更好的复现这个问题,也帮助大家进一步理解dlopen. 问题复现 以下是项目代码的文件结构: # tree . ├── file1 │ …

【大语言模型】Docker部署清华大学ChatGLM3教程

官方地址:https://github.com/THUDM/ChatGLM3 1 将代码保存至本地 方法1: git clone https://github.com/THUDM/ChatGLM3 方法2: https://github.com/THUDM/ChatGLM3/archive/refs/heads/main.zip 2 创建Docker文件 注:请先…

【分布式】CAP理论详解

一、CAP理论概述 在分布式系统中,CAP是指一组原则,它们描述了在网络分区(Partition)时,分布式系统能够提供的保证。CAP代表Consistency(一致性)、Availability(可用性)和…

CSS特效010:文字颜色渐变的流光效果

查看专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS相关的库、…

Python编程-----网络通信

一.统一资源定位器URL 专为标识Internet网上资源位置而设的一种编址方式 ,URL一般由以下几个部分组成: 传输协议://主机IP地址(或域名地址)[:端口号]/资源所在路径和文件名 •传输协议是指访问该资源所使用的访问协议; •主机IP地址(或域名…

C/C++轻量级并发TCP服务器框架Zinx-框架开发002: 定义通道抽象类

文章目录 2 类图设计3 时序图数据输入处理:输出数据处理总流程 4 主要实现的功能4.1 kernel类:基于epoll调度所有通道4.2 通道抽象类:4.3 标准输入通道子类4.4 标准输出通道子类4.5 kernel和通道类的调用 5 代码设计5.1 框架头文件5.2 框架实…

MATLAB中Filter Designer的使用以及XILINX Coefficient(.coe)File的导出

文章目录 Filter Designer的打开滤波器参数设置生成matlab代码生成XILINX Coefficient(.COE) File实际浮点数的导出官方使用教程 Filter Designer的打开 打开Filter Designer: 方法一:命令行中输入Filter Designer,再回车打开。 方法二&…

夸克发布自研大模型 加速下一代搜索体验创新

国产大模型阵营再添新锐选手。11月14日,阿里巴巴智能信息事业群发布全栈自研、千亿级参数的夸克大模型,将应用于通用搜索、医疗健康、教育学习、职场办公等众多场景。夸克App将借助自研大模型全面升级,加速迈向年轻人工作、学习、生活的AI助手…

ORACLE数据库实验总集 实验一 Oracle数据库安装与配置

一、实验目的 (1)掌握 Oracle数据库服务器的安装与配置 (2)了解如何检查安装后的数据库服务器产品,验证安装是否成功。 (3)掌握 Oracle数据库服务器安装过程中出现的问题的解决方法。 二、实验…

2023亚太杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【CASS精品教程】打开cass提示base.dcl未找到文件的解决办法

打开cass 7.1时提示base.dcl未找到文件的解决办法。 文章目录 一、问题描述二、解决办法 一、问题描述 系统上安装了cad2006cass7.1,cass软件可以正常打开,但是在使用屏幕菜单绘制地图时,选择一个工具,提示base.dcl未找到文件&am…

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序

详解 KEIL C51 软件的使用建立工程-CSDN博客 2. 设置工程 (1)在图 2-15 的画面中点击 会弹出如图 2-16 的对话框.其中有 10 个选择页.选择“Target” 项,也就是图 2-16 的画面. 图 2-16 在图 2-16 中,箭头所指的是晶振的频率值,默认是所选单片机最高的可用频率值.该设置值与单…

酷柚易汛ERP- 调拨单操作指南

1、应用场景 调拨单可以记录不同仓库之间货物的转移,只能处理同价调拨,调动前后成本不变。 2、主要操作 2.1 新增调拨单 打开【仓库】-【调拨单】新增调拨单 可将商品从一个仓库调入另一个仓库;单据审核后,扣减商品在调出仓库…

qt+opengl 着色器VAO、VBO、EBO(四)

文章目录 一、顶点着色器和片段着色器代码分析1. 着色器12. 顶点着色器2 二、使用步骤1. 使用着色器12. 使用着色器23. 在着色器2中使用EBO 三、完整代码 一、顶点着色器和片段着色器代码分析 1. 着色器1 用到的坐标矩阵, 四个四边形顶点坐标 float vertices_data[36] {// 所…

【仙逆】王林400年晋升元婴,复仇藤化元杀尽藤姓,高老畏罪自裁

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料仙逆第10集剧情解析,高启明,缥缈宗的元婴初期老祖,一生潜心研究推演之术,洞察先机,乃是宗门之人的精神支柱。藤化元曾为寻找王林父母所在之…

【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第二弹)

本次选题都为选择题。涉及到二叉树总结点和叶子结点的计算、二叉树的基本性质、根据二叉树的前序/后序和中序遍历画出二叉树、哈夫曼树等等…希望对你有帮助哦~😝 1.若一颗二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数为() A…