【问题标题】:Angular 4 GET 403 responseAngular 4 GET 403 响应
【发布时间】:2017-12-11 12:26:55
【问题描述】:

我在 Angular 4 中编写了一个调用 REST API (DJANGO) 的应用程序。 代码如下:

export class ForecastUnitService {

private path = 'forecastunit/';
private options;
constructor (private http: Http, private c:CentralService) {
this.options=this.c.createOptions();
}

getForecastUnits(): Observable<ForecastUnit[]> {
return this.http.get(this.c.createURL(this.path),this.options)
  .map(this.extractData)
  .catch(this.handleError);
}
...
}

我添加了包含授权标头的选项,但我仍然得到 403 禁止。但是,当我尝试使用 cUrl 或 Postman 或大摇大摆地进行通话时,我得到了同样的结果。 所以首先,标题不正确,但是当我记录选项时,我得到:

{"method":null,"headers":{"Authorization":["**Correct Token**"],"Content-Type":["application/json"]},"body":null,"url":null,"withCredentials":null,"responseType":null}

所以这不是问题,当我查看 Chrome 的响应时,我看到以下内容:

{"detail":"Authentication credentials were not provided."}

所以再次没有凭据,但我真的通过了,出了什么问题?

【问题讨论】:

  • 您传递的令牌的格式是什么?
  • 基本 64,我猜
  • 想知道你在Authorization中传递的token的示例格式
  • 我通过“基本”+大小写代码

标签: django angular api get authorization


【解决方案1】:

你能告诉我们 CentralService 吗? 此外,您可能希望避免在构造函数中调用它,而是实现 OnInit

【讨论】:

    【解决方案2】:

    Angular 的 http 模块将所有标题名称更改为小写。这可能是一个问题,因为某些 API 服务不遵循规范,并且它们的标头检查在这些应该不区分大小写时区分大小写。

    检查您的 API 配置。

    我假设您的 CentralService 创建了有效选项。

    interface RequestOptionsArgs { 
      url: string|null
      method: string|RequestMethod|null
      search: string|URLSearchParams|{[key: string]: any | any[]}|null
      params: string|URLSearchParams|{[key: string]: any | any[]}|null
      headers: Headers|null
      body: any
      withCredentials: boolean|null
      responseType: ResponseContentType|null
    }
    

    标题:

    class Headers {
      static fromResponseHeaderString(headersString: string): Headers
      constructor(headers?: Headers|{[name: string]: any}|null)
      append(name: string, value: string): void
      delete(name: string): void
      forEach(fn: (values: string[], name: string|undefined, headers: Map<string, string[]>) => void): void
      get(name: string): string|null
      has(name: string): boolean
      keys(): string[]
      set(name: string, value: string|string[]): void
      values(): string[][]
      toJSON(): {[name: string]: any}
      getAll(name: string): string[]|null
      entries()
    }
    

    【讨论】:

    • 我的问题中的第二个代码块是我的 RequestOptions,这些看起来对我来说是正确的..
    • 如果在您的服务中正确输入所有内容,TypeScript 应该会突出显示可能的错误。以防万一检查 Angular 文档中的RequestOptionsArgs
    • 如何将标题检查更改为不区分大小写?或者在 Angular 中标题不是小写的?
    • 这是 Angular 的设计。我没有使用 django 的经验,因此无法为您提供有关 REST 框架的帮助。
    • 小写,大写确实是问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2018-04-11
    • 2020-11-19
    • 2020-11-12
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多