在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,但是还有另一种选择吗?
答案 0 :(得分:0)
我不认为这是CORS问题-通常会显示为CORS特定的错误消息-类似于“未找到Access-Control-Allow-Origin响应标头”。
您可以为失败的请求提供完整的请求和响应标头吗?