移动设备“(未知URL)的Http错误响应:0未知错误”

时间:2019-01-17 16:13:11

标签: php angular symfony nelmiocorsbundle

在Angular 6 / Symfony 4项目中,CORS出现问题。 该项目具有登录/注册模块。我正在使用FOSUserBundle并默认将其设置为false。然后,我发送一封带有确认链接(https://subdomain.example.com/confirm-email/CONFIRMATION_TOKEN)的电子邮件,以确认它不是机器人。 该链接将重定向到Angular中的一个特殊页面,该页面会输入用户帐户来启用它。 事实是,在任何浏览器上的笔记本电脑上,一切都可以正常工作,但是当我想用手机进行操作时,没有附加任何内容。我试图警告错误消息,但我得到了:

{"headers":{"normalizedNames":{}, "lazyUpdate":null,"headers": {}},"status":0,"statusText":"UnknownError","url":null,"ok":false,"name":"HttpErrorResponse","message":"Http failure response for (unknown url): 0 Unknown Error","error":{"isTrusted":true}}

因此,我进行了一些研究,发现这是一个CORS问题,有些主题说它是Angular,有些则说服务器配置错误。我已经阅读了很多有关CORS的文章,但实际上解决该问题没有任何进展。

以下是一些示例:

Symfony,.env

CORS_ALLOW_ORIGIN=^https://subdomain.example.com$

Symfony,nelmio_cors.yaml

nelmio_cors:
    defaults:
        origin_regex: true
        allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['Content-Type', 'Authorization']
        max_age: 3600
    paths:
        '^/': ~

角度,login.service.ts

async confirmUser(confirmToken: string): Promise<any> {
    const httpOptions = {
        headers: new HttpHeaders({
            'Content-Type': 'application/json; charset=UTF-8'
        })
    };

    return await this.http.post(`${this.url}/user/${confirmToken}`, httpOptions).toPromise();
}

角度,确认用户.component.ts

async confirmUser() {
    try {
      await this.loginService.confirmUser(this.confirmToken);
      setTimeout(() => {
        window.location.href = 'https://example.com/';
      }, 1000);
    } catch (error) {
      swal({
        type: 'error',
        title: 'Oops...',
        text: error.statusText,
        showConfirmButton: false,
        showCancelButton: false,
        timer: 2000
      });
    }
}

我真的不知道问题出在哪里,为什么它不能在移动设备上正常工作,却可以与笔记本电脑完美配合。我正在使用Browserstack在多个设备(iOS,Android)上进行测试。在装有Safari和Chrome的移动设备(iOS12)中也是如此。

仅供参考,这两个项目位于同一服务器上,但具有两个不同的url。 例如:subdomain.example.com和subdomain-api.example.com

如果有人遇到过这种情况并有解决方案,请成为我的客人。

编辑1

感谢sideshowbarker删除了我的cors标签,同时在检查您的个人资料时,我看到了您的answers之一,并尝试了“如何使用CORS代理来解决” No Access-Control-Allow-源头的“问题”方法。它适用于OPTIONS请求,但不适用于POST(图像:https://imgur.com/0WkeYlQ)。为此,我可能有一个解决方案:我的CTO被IP阻止了对API的访问。我们只允许我们公司提供example.com,subdomain.example.com和IP。因此,我想我们应该允许https://cors-anywhere.herokuapp.com/ IP,但是还有另一种选择吗?

1 个答案:

答案 0 :(得分:0)

我不认为这是CORS问题-通常会显示为CORS特定的错误消息-类似于“未找到Access-Control-Allow-Origin响应标头”。

您可以为失败的请求提供完整的请求响应标头吗?