uni-app 支付宝小程序云 客户端访问云对象 url参数化会报跨域错误 在支付宝小程序云配置跨域也会报错 阿里云正常不会报错

uni-app 支付宝小程序云 客户端访问云对象 url参数化会报跨域错误 在支付宝小程序云配置跨域也会报错 阿里云正常不会报错

产品分类:
uniCloud/支付宝小程序云

操作步骤:

在支付宝小程序云 里配置 跨域 域名和端口,然后再通过localhost 访问 云对象url 会报跨域错误。

预期结果:

可以正常访问

实际结果:

报错 Access to XMLHttpRequest at ‘https://env-00jxge1mkcqs.dev-hz.cloudbasefunction.cn/api/sysUser/login’ from origin ‘http://localhost:3001’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

bug描述:

客户端非 uni-app, 是用vue3写的前端, 通过 http://localhost:3001 访问 url参数化 云对象会报跨域报错,在支付宝云小程序配了 localhost:3001, 只有支付宝云必现,阿里云无法复现(或者没有这个bug)

https://env-00jxge1mkcqs.dev-hz.cloudbasefunction.cn/api/sysUser/login

访问这个 报跨域错误

Image 1
Image 2
Image 3


更多关于uni-app 支付宝小程序云 客户端访问云对象 url参数化会报跨域错误 在支付宝小程序云配置跨域也会报错 阿里云正常不会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

13 回复

正在排查中。

更多关于uni-app 支付宝小程序云 客户端访问云对象 url参数化会报跨域错误 在支付宝小程序云配置跨域也会报错 阿里云正常不会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


@DCloud_云服务_moyang 您好, 这是在 支付宝小程序云 服务端配的 ,客户端配了没有任何作用。 同样的请求在阿里云 都没有跨域报错, 但是在支付宝小程序云报了,您那边自己可以试下 ,看怎样才能成功

不过 支付宝云要把这个 withCredentials 设置false ,才能在火狐里请求成功, 阿里云的设置ture 就可以请求成功,不报跨域错误,希望你们能处理好这个问题,而不是临时解决方案

这个要在哪里改呢

@DCloud_云服务_moyang withCredentials 设置false 你们能不能在谷歌浏览器测试一下, 火狐和 IE 浏览器正常 ,谷歌浏览器访问报 跨域错误。 只有支付宝小程序云是这样。

看截图,谷歌浏览器 报跨域错误,火狐 ie 正常

这个问题支付宝已修复,预计下周发布。

还是有问题啊

回复 5***@qq.com: 具体问题截图发出来

可以发个新帖

一样的问题!!查了一天了,结果换个阿里云就好了,我真的是服了。

在 uni-app 中访问支付宝小程序云的云对象时,如果使用 URL 参数化(例如通过 uniCloud.callFunctionuniCloud.callContainer 传递参数),可能会遇到跨域错误。即使你在支付宝小程序云的控制台中配置了跨域规则,仍然可能报错。以下是一些可能的原因和解决方案:

1. 检查支付宝小程序云的跨域配置

  • 确保在支付宝小程序云的控制台中,已经正确配置了跨域规则。跨域规则需要允许你的小程序域名和请求方法(如 GETPOST 等)。
  • 如果跨域配置没有问题,但仍然报错,可能是支付宝小程序云的跨域机制与阿里云不同,导致配置未生效。

2. 使用云函数的代理请求

  • 如果直接访问云对象时出现跨域问题,可以通过云函数来代理请求。云函数运行在服务器端,不存在跨域问题。
  • 你可以在云函数中发起请求,然后将结果返回给客户端。这样客户端只需要调用云函数,而不需要直接访问云对象。

示例:

// 云函数代码
exports.main = async (event, context) => {
    const result = await uniCloud.callContainer({
        path: '/your-endpoint',
        method: 'GET',
        data: event.query
    });
    return result;
};

// 客户端代码
uniCloud.callFunction({
    name: 'your-cloud-function',
    data: {
        query: { param1: 'value1', param2: 'value2' }
    }
}).then(res => {
    console.log(res);
});
回到顶部