【发布时间】:2020-08-04 04:42:54
【问题描述】:
我正在尝试将一个非常简单的 Angular 10 应用程序连接到 Bigcommerce API,但出现以下错误:
CORS 政策已阻止从源“https://angular-example123.stackblitz.io”访问“https://api.bigcommerce.com/stores/0r5ke/v3/products”获取:响应预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
我正在使用 stackblitz.io,因为它提供了 Bigcommerce 所需的 https 连接。所以我的 app.component.ts 如下:
import { Component, VERSION } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Product } from './product';
import { Observable } from 'rxjs';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
url ='https://api.bigcommerce.com/stores/0rfgr/v3/products';
products: Observable<any>;
constructor( private http: HttpClient ) {}
getProducts() {
let headers = new HttpHeaders();
headers = headers.set('X-Auth-Token', '123456789').set('X-Auth-Client', '123456789').set('Access-Control-Allow-Origin', '*');
this.products = this.http.get(this.url, { headers })
}
}
product.ts 文件:
export interface Product {
name: string;
}
如果我将 URL 更改为“https://jsonplaceholder.typicode.com/users”,它会起作用并显示数据。任何关于它为什么不能与 Bigcommerce 合作的帮助将不胜感激。
【问题讨论】:
-
只是一个评论——你不应该把你的 Auth Headers 放在客户端代码中——不要将它们嵌入到从浏览器运行的 JS 中。攻击者可以读取它们并使用它来攻击您商店的 API。创建一个服务器端应用程序并将凭据嵌入为环境变量。
-
是的,感谢您的提示。经过研究,我发现 Bigcommerce 不允许使用 CORS。我必须在 Bigcommerce 商店中安装和授权 Angular 应用程序。谢谢。
-
您不需要这样做,您只需要创建一个节点/后端服务器来代理 API 请求到 BC,并将数据发送到您的前端 - 您将后端配置为允许cors - 到某些域,或允许所有 cors。
标签: angular api bigcommerce