英文:
Flutter Web and Appwrite CORS problem after published to my web-server
问题
我在构建和发布我的Flutter Web应用程序之后遇到了问题。
当我从IDE(Android Studio)中运行它时,我的应用程序在本地运行时完美无缺,使用Google Chrome打开localhost:somePort。
我已经完成的步骤:
- 将我的应用程序发布到我的Web服务器,并且在网站上正常运行,即www.example.com。
- 在Appwrite控制台设置中为我的Appwrite应用程序创建了一个自定义域名,即ar.example.com。
- 在域名的DNS设置中创建了A记录,通过浏览器可以访问Appwrite控制台的地址为https://ar.example.com/。
- 根据文档在Appwrite服务器上创建了SSL证书。
- 将Flutter应用程序中的Appwrite端点更改为新地址:https://ar.example.com/v1。
- 修改了Appwrite服务器的appwrite文件夹中的.env文件以包括example.com和www.example.com。
尽管经过了所有这些步骤,但在浏览器中打开应用程序时,当尝试运行来自服务器的第一个命令时,应用程序会停止运行,浏览器的控制台会显示CORS错误,如下所示:
访问来自原始地址'https://example.com/'的XMLHttpRequest'https://ar.example.com/v1/account?#'已被CORS策略阻止:'Access-Control-Allow-Origin'标头的值为'https://localhost/',与提供的原始地址不相等。
英文:
I have a problem after I have built and published my Flutter Web App.
My app is working perfectly when running it from the IDE , Android Studio, with Google chrom in Localhost:somePort.
What I have done:
-
Published my app to my web server and it is working on the web-site with my domain, i.e. www.example.com
-
Created a custom domain in Appwrite console settings for my Appwrite app as ar.example.com,
-
Created A record in the DNS settings of domain, the console of Appwrite is accessible through the browsert at https://ar.example.com/,
-
Created an SSL certification on the Appwrite server according to the docs.
-
Changed the Endpoint of Appwrite in my Flutter app to point to the new address: https://ar.example.com/v1
-
I have modified the .env file in appwrite folder of the Appwrite server to the example.com and www.example.com.
and still after all that , I can open the app in the browser, but is stops running when it tries to run the first command from the server, browser's console gives me a CORS error as follows:
Access to XMLHttpRequest at 'https://ar.example.com/v1/account?#' from origin 'https://example.com/' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value 'https://localhost/' that is not equal to the supplied origin.
答案1
得分: 1
这个错误可能发生在以下情况下:
- 未调用
client.setProject()
方法 - 传递给
client.setProject()
方法的值不正确 - 项目中没有添加与应用程序主机名匹配的 Web 平台
此外,我不确定您是否应该执行以下步骤:
我已经修改了 Appwrite 服务器的 appwrite 文件夹中的 .env 文件,将其设置为 example.com 和 www.example.com。
Appwrite 的 APP_DOMAIN*
环境变量应设置为您的主要 Appwrite 主机名。
英文:
This error can occur if:
client.setProject()
is not called- the value passed to
client.setProject()
is incorrect - there is no web platform added in your project that matches the hostname of your app
Also, I'm not sure you should be doing this step:
> I have modified the .env file in appwrite folder of the Appwrite server to the example.com and www.example.com.
The APP_DOMAIN*
env vars for Appwrite should be set to your main Appwrite hostname.
答案2
得分: 0
我已经在Appwrite支持的帮助下找到了问题,希望这能帮助某些人。
在创建Appwrite项目时,您需要在项目的控制台设置中创建一个平台。
问题似乎是由于将平台创建为Flutter Web引起的,因为Flutter中定义的主机名期望为反向主机名,例如com.domainName.hostName,因此浏览器会将其识别为与客户端不同的域。
解决方案是创建一个Web平台,而不是Flutter Web平台。
Appwrite支持团队已承诺他们会仔细查看并修复必要的问题。
英文:
I have found the problem with the help of Appwrite support, hope this helps someone out there.
When creating a project in Appwrite you need to create a platform, in the project's console settings.
It appears that creating the platform as Flutter Web is causing this problem, since the hostname as defined in flutter is expecting a reverse host name, like com.domainName.hostName, and therefore recognized by the browser as a different domain than the client.
The solution is to create a Web platform instead of Flutter web platform.
Appwrite support team has promised they will carefuly look into it and fix what needed.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论