uni-app cas身份认证集成多个系统时 post请求第一次会丢失参数
uni-app cas身份认证集成多个系统时 post请求第一次会丢失参数
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win10
HBuilderX类型:正式
HBuilderX版本号:3.2.16
手机系统:Android
手机系统版本号:Android 11
手机厂商:华为
手机机型:mate30
页面类型:vue
vue版本:vue2
打包方式:云端
操作步骤:
cas身份认证成功后,uni.request请求资源使用post传参时,因cas子系统进行验证时中间有个302再请求,因302后将参数丢失,造成请求异常。 第二次请求时正常。 使用get请求时第一302后因不丢参数也正常。
预期结果:
302后不要丢失参数。将参数重新提交。
实际结果:
302后丢失参数. 此现象当前所有版本都存在。
bug描述:
我们使用cas做为身份认证,里面集成多们子系统。在平台登录后.
问题:第一次访问某个子系统post请求数据时,会出现302重定向的过程,会将post的参数丢失,造成第一次请求失败,第二次请求时因重定向时做了身份认证。请求正常。
使用get提交参数时第一次正常。
看能否升级okhttp请求,不要将post参数丢了。
同时解决时注意一下https定重向http或http重定向https
处理建议参考:https://www.jianshu.com/p/61a60859a317
更多关于uni-app cas身份认证集成多个系统时 post请求第一次会丢失参数的实战教程也可以访问 https://www.itying.com/category-93-b0.html
好 我先看看哈
更多关于uni-app cas身份认证集成多个系统时 post请求第一次会丢失参数的实战教程也可以访问 https://www.itying.com/category-93-b0.html
那你试试你们的服务器能否直接返回 307呢
这是一个典型的HTTP 302重定向导致POST请求参数丢失的问题。在uni-app的uni.request中,当遇到302状态码时,默认行为会跟随重定向,但对于POST请求,重定向后的新请求会变为GET请求(根据HTTP/1.1规范),导致参数丢失。
问题分析:
- CAS认证流程中,首次访问子系统时触发302重定向到认证中心
- uni-app底层网络库(Android端为okhttp)在处理302时,默认将POST转为GET
- 第二次请求因已认证,不再重定向,因此正常
解决方案:
方案一:服务端优化(推荐)
- 让CAS服务端在认证成功后返回200状态码而非302
- 通过响应体返回重定向URL,由前端控制跳转
- 避免HTTP层面的重定向导致请求方法改变
方案二:前端拦截处理 在uni.request的拦截器中检测302响应,手动处理:
uni.addInterceptor('request', {
invoke(args) {
// 存储原始请求参数
args._originalData = args.data
args._originalMethod = args.method
},
success(res) {
if (res.statusCode === 302) {
// 获取重定向URL
const redirectUrl = res.header.Location || res.header.location
if (redirectUrl && args._originalMethod === 'POST') {
// 使用原始参数重新发起POST请求
return uni.request({
url: redirectUrl,
method: 'POST',
data: args._originalData,
header: args.header
})
}
}
}
})

