можно ли вызвать API контактов Yahoo в angular 8 - PullRequest
0 голосов
/ 16 июня 2020

в приложении angular Мне нужно запросить контактный API Yahoo: сначала я хочу знать, можно ли запросить у клиента или нет? мой код в Angular:

ngOnInit(): void {
      this.route.queryParams.subscribe(q => {

      const body = {
        client_id: this.yahooObj.clientId,
        client_secret: this.yahooObj.clientSecret,
        redirect_uri: this.yahooObj.redirect,
        code: q.code,
        grant_type: 'authorization_code'
      }
      this.http.post<any>('https://api.login.yahoo.com/oauth2/get_token',
        body, {headers: new HttpHeaders({
            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
            'Authorization': 'Basic' + btoa(`${this.yahooObj.clientId}:${this.yahooObj.clientSecret}`)
          })})
        .subscribe(data => {
          console.log('return data service', data);
        }, (err: HttpErrorResponse) => {
          console.log('Error', err);
        });
  });
}

 yahooAuth() {
    window.open(`https://api.login.yahoo.com/oauth2/request_auth?client_id=${this.yahooObj.clientId}&response_type=code&redirect_uri=${this.yahooObj.redirect}`);
  }

и перенаправление и код beck со страницы аутентификации yahoo работают нормально, но запрос http.post обратно ниже Ошибки о политике CORS, так как в почтальоне работает нормально.

Доступ к XMLHttpRequest по адресу 'https://api.login.yahoo.com/oauth2/get_token' from origin 'http://localhost: 3201 ' заблокирован политикой CORS: ответ на предварительный запрос не проходит проверка контроля доступа: в запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin.

, поскольку в почтальоне все в порядке, а в браузере есть эта ошибка политики CORS, мне нужно убедиться, что там есть ли способ вызвать этот API в клиенте?

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Вы можете написать вызов Yahoo API на внутреннем сервере и вызвать API из клиента angular, это так называемый прокси. Это может решить проблему CORS.

0 голосов
/ 16 июня 2020

Вам не хватает пробела между Basic и токеном. Попробуйте следующее:

'Authorization': 'Basic ' + btoa(`${this.yahooObj.clientId}:${this.yahooObj.clientSecret}`)

Обратите внимание на пробел после слова Basic.

Что касается проблемы CORS, вы можете настроить прокси во внешнем интерфейсе для перенаправления запроса.

...