Angular 6 - Instagram POST API для аутентификации в Angular показывает ошибку CORS - PullRequest
0 голосов
/ 19 ноября 2018

Я искал на разных сайтах информацию об устранении ошибки CORS, но не нашел никакого работающего решения.Итак, в одном из моих проектов я включил аутентификацию в Instagram.Я получаю код? Code = XXX при первом вызове get URL согласно doc при вызове https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code.

. На следующем шаге я должен вызвать метод POST, чтобы получить аутентификацию IGтокен и данные пользователя.https://api.instagram.com/oauth/access_token с необходимыми данными.Но вызов этого API показывает мне ошибку CORS:

IG CORS error

Мой код (с использованием модуля Angular HTTPClient):

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

const httpOptions = {
  headers: new HttpHeaders({
    'Access-Control-Allow-Origin':'*',
    'Content-Type': 'application/json'
  })
};

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

  constructor(private http: HttpClient) { }

  instagramGetToken (igcode) {
    let data = {
      client_id: 'XXX',
      client_secret: 'XXX',
      grant_type: 'authorization_code',
      redirect_uri: 'http://localhost:4200/login',
      code: igcode
    }
    try {
      return this.http.post('http://api.instagram.com/oauth/access_token', data, httpOptions);
    }
    catch (err) {
      console.error(err);
      return err;
    };
  }
}

Примечание: Это прекрасно работает в Почтальоне

1 Ответ

0 голосов
/ 19 ноября 2018

Ну, я не знаю, что происходило, но вместо отправки данных в формате JSON требуется POST-данные в виде данных формы.Итак, я сделал это:

const body = new HttpParams()
    .set('client_id', 'XXX')
    .set('client_secret', 'XXX')
    .set('grant_type', 'authorization_code')
    .set('redirect_uri', `${location.protocol}//${location.hostname + (location.port ? ':' + location.port : '')}/`)
    .set('code', igcode)

    return this.http.post('https://api.instagram.com/oauth/access_token',
    body.toString(),
    {
        headers: new HttpHeaders()
        .set('Content-Type', 'application/x-www-form-urlencoded')
    }
    );

И это сработало хорошо.Все еще любопытно, почему это не работает с данными JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...