Как я могу подключить мой Angular Service к Vimeo? («Учетные данные пользователя не предоставлены».) - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь создать службу для подключения к моей учетной записи Vimeo, но я получаю ответ.

Я уже дважды проверил идентификатор клиента и токен.

HttpErrorResponse {заголовки: HttpHeaders, status: 401, statusText: «Требуется авторизация», URL: «https://api.vimeo.com/oauth/authorize/client", ok: false,…}

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class CourseViewService {

  constructor(private http: HttpClient) {}

  private configUrl = 'https://api.vimeo.com/oauth/authorize/client';
  private httpOptions = {
    headers: new HttpHeaders({
      'Authorization': btoa('****MYCLIENTID*****:******MYCLIENTSECRET****'),
      'Content-Type': 'application/json',
      'Accept': 'application/vnd.vimeo.*+json;version=3.4',
    }),
  };
  private params = new HttpParams()
    .set('grant_type', 'client_credentials')
    .set('scope', 'scope_list');

  getAnyResponse() {
   this.http.post(this.configUrl, this.params, this.httpOptions)
      .subscribe( response => {
        console.log(response);
    });
  }
}


HttpErrorResponse {headers: HttpHeaders, status: 401, statusText: "Authorization Required", url: "https://api.vimeo.com/oauth/authorize/client", ok: false, …}

1 Ответ

0 голосов
/ 05 апреля 2019

С эта документация (выделено мое):

В теле запроса установите в поле grant_type значение client_credentials; это требуется. Вы также можете при желании установить в поле области видимости список разделенных пробелами областей. Значением по умолчанию для этого поля является общедоступное.

Пример тела из того же:

{
  "grant_type": "client_credentials",
  "scope": "{scope_list}"
}

Похоже, что вы отправляете HttpParam объект как тело запроса, который не соответствует ожидаемому телу.

private params = new HttpParams()
  .set('grant_type', 'client_credentials')
  .set('scope', 'scope_list');
private body = {
  "grant_type": "client_credentials",
  "scope": "scope_list",
};

getAnyResponse() {
  // Take a look at all the extra junk in the param object vs a simple object
  console.log(JSON.stringify(this.params));
  console.log(JSON.stringify(this.body));

  this.http.post(this.configUrl, this.body, this.httpOptions)
    .subscribe( response => {
      console.log(response);
  });
}
...