Cordova 10的allowList存在CORS问题。

7

我正在开发一个用于Android的cordova应用程序,切换到cordova 10后,出现了与CORS问题相关的错误,我删除了cordova-plugin-whitelist插件,因为它已经被弃用:

随着允许列表功能现在集成到 Cordova Android 的核心中(10.x 及更高版本),此插件不再需要。

我的 config.xml 文件包含以下行:

<access origin="*" />

在切换至cordova 10之前一切正常,这几天我在搜索但没有结果,谢谢。
2个回答

14

cordova-android 10.x 现在使用 https:// 协议(WebAssetLoader)提供文件服务,而不是之前的 file:/// 协议。这意味着您需要更改服务器上的 CORS 设置,以允许您的移动应用程序所在的主机名。默认情况下为 https://localhost,但您可以使用 <preference name="hostname" value="localhost" /> 设置来更改主机名(协议不可配置)。

如果您不在 Cordova 中更改主机名,则需要在服务器配置中添加 https://localhost 作为允许来源,使用 Access-Control-Allow-Origin 标头。


2
谢谢您的回复,“hostname”很好用,但是当我更改值时,我必须将“AndroidInsecureFileModeEnabled”设置为“true”,否则在应用程序启动时我会收到此错误“Application Error ERR_CONNECTION_REFUSED ...”。设置“AndroidInsecureFileModeEnabled”为“true”是否存在安全问题? - Mahdi Soltani
3
如果将AndroidInsecureFileModeEnabled设置为true,就会回到cordova-android 10之前的file:///方案。 这样做没有安全问题,只是由于file:///来源的CORS问题而进行了更改。 - František Augusztin
你能分享一下关于 cordova-android v10 中更改为 https:// 的链接吗? - trebor
2
@trebor Cordova博客是关于变化和原因的好资源。WebAssetLoader在https://cordova.apache.org/announcements/2021/07/20/cordova-android-10.0.0.html博客条目中提到,该条目还链接到PR https://github.com/apache/cordova-android/pull/1137。最后,CORS问题源于Android Cordova应用现在在https://localhost上运行(除非更改),因此您的后端服务器需要允许https://localhost(或使用主机名首选项更改为其他内容)。 - František Augusztin

13

我刚把我的项目从Cordova 9迁移到了Cordova 10.1.1,现在的目标是Android 12 (API 31),同时使用Firebase进行OAuth (根据文档)。

构建过程很顺利,但是尝试通过OAuth进行登录时出现了err_connection_refused错误。唯一需要解决这个问题的方法就是添加偏好设置name="AndroidInsecureFileModeEnabled" value="true"config.xml里。


1
这似乎是一个新问题和新答案,而不是原问题的答案。您能否澄清为什么您认为这与原问题相关?此外,您能否提供有关配置设置的更多上下文信息?(例如,父元素,以便清楚地了解应该在哪里设置。) - Jeremy Caney
5
如果缺乏解释,这是一个有效的答案。将<preference name="AndroidInsecureFileModeEnabled" value="true" />添加到<platform name="android">元素中,可以恢复从file://协议提供服务的旧行为,从而解决CORS错误。 - jamsandwich
2
我更喜欢这个答案,因为我不想将localhost添加到我的服务器。 - UglyBlueCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接