角度 2 与 auth0 读取所有用户错误 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”
Posted
技术标签:
【中文标题】角度 2 与 auth0 读取所有用户错误 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”【英文标题】:angular 2 with auth0 to read all user- error Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' 【发布时间】:2017-05-06 00:18:21 【问题描述】:能够读取用户配置文件,并可以在我的 Angular 2 应用程序中从 Auth0 更新用户元数据。像这样
this.lock.getProfile(authResult.idToken, (error, profile) =>
if (error)
// Handle error
alert(error);
return;
和
this.authHttp
.patch('https://' + myConfig.domain + '/api/v2/users/' + this.auth.userProfile.user_id, data, headers: headers)
.map(response => response.json())
.subscribe(
response =>
this.auth.userProfile = response;
localStorage.setItem('profile', JSON.stringify(response));
this.router.navigate(['/profile']);
,
error => alert(error.json().message)
);
但是在试图让所有用户都得到错误时 - "Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 404."
这是代码
var headers: any =
"Content-Type": "application/json; charset=utf-8",
"cache-control": "no-cache"
;
this.authHttp
.get('https://' + myConfig.domain + '/api/v2/users/' + '?per_page=100&page=0&search_engine=v2', headers: headers )
.map(response => response.json())
.subscribe(
response =>
console.log(response);
,
error => alert(error.json().message)
);
客户端测试在网站上运行良好的地方 https://auth0.com/docs/api/management/v2#!/Users/get_users 不知道出了什么问题。
还有带有 Access-Control-Allow-Origin 的标题,有同样的问题
var headers: any =
"Content-Type": "application/json; charset=utf-8",
"cache-control": "no-cache",
"Access-Control-Allow-Origin": "*"
;
【问题讨论】:
在您的 Auth0 设置中,您是否将 localhost 添加到了允许的回调 URL?如果没有,那么您也会收到该错误 【参考方案1】:实际上,您正在尝试使用localhost
,因此您必须在后端添加header
:
.header("Access-Control-Allow-Origin", "*")
希望对您有所帮助。
【讨论】:
否 :-( 仍然无法正常工作。使用 Access-Control-Allow-Origin 更新问题标题。同样的问题 您添加了角码(前端)。您可以尝试添加您的后端代码吗? 我正在使用 auth0(auth0.com) 作为服务器。不确定如何设置 Access-Control @auth0 网站 @Manu:您可以在应用程序的设置中配置它,查看:manage.auth0.com/#/applications 我的意思是您希望为您的应用程序允许来源和回调 URL。 我已经配置了允许的回调 URL 和允许的来源 (CORS)。为我的配置编辑了问题。如果我遗漏了什么,请告诉我【参考方案2】:您在服务器(例如:Apache)存档:.htaccess 中配置:
Header set Access-Control-Allow-Origin "*"
但是你可以尝试在谷歌浏览器中安装扩展也可以在开发环境的情况下:
输入网址:chrome://settings/
-> Extensions
-> Get more extensions
-> 搜索Allow-Control-Allow-Origin: *
-> Click to Active the Extension and try run code again
。
你可以看到为什么这个错误 -> click.
解决了几个人出现相同错误的其他帖子 -> (***)
【讨论】:
嗨小百合,这个扩展已经添加到我的 chrome 中了。但是有同样的问题 现在点击开启跨域资源共享并尝试运行代码 如果不起作用,请尝试在“拦截的 URL 或 URL 模式”中添加 url【参考方案3】:问题是即使不会发出 CORS 飞行前请求,请求也会失败。表明这一点的关键部分是对预检请求的响应不在2XX
范围内。
您在预检时收到 404
响应,但如果您从未绑定到 CORS 的应用程序发出相同请求,您仍会收到 404
。
您尝试调用的端点的正确地址是:
https://[AUTH0_ACCOUNT]/api/v2/users
而不是那个,你打电话给:
https://[AUTH0_ACCOUNT]/api/v2/users/
您需要删除末尾多余的斜线。
但是,这将解决 404 问题,但不会解决根本问题... Auth0 管理 API 旨在供服务器端应用程序使用,该应用程序可以通过客户端身份验证获取必要的访问令牌。
有关参考,请参阅The Auth0 Management APIv2 Token。
PATCH用户端点起作用的原因可能是该端点只影响单个用户,并且允许使用CORS。
【讨论】:
嗨 Joao,我现在使用这个网址,但同样的问题 this.authHttp .get('https://<my account>
部分。
不确定您如何使用 - 授权:承载 .get('https://<ac name>.auth0.com/api/v2/users'
, headers: headers ) 出现错误** 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:3000' 不允许访问。** 但补丁正在运行 this.authHttp .patch('https://' + myConfig.domain + '/api/v2/users/' + this.auth.userProfile.user_id, data, headers: headers)
以上是关于角度 2 与 auth0 读取所有用户错误 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”的主要内容,如果未能解决你的问题,请参考以下文章
cors(cors 策略:对预检请求的响应未通过访问控制检查)角度 7 中的错误