Проблема с загрузкой данных CORS из реализации cakephp restapi в угловое приложение - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь подключиться к уже работающему серверу RestAPI, разработанному на PHP (фреймворк CakePHP);я пытаюсь выполнить простое действие входа в приложение Angular 7, и в случае успеха я продолжу реализацию.

Это код вызова приложения Angular:

  constructor(protected cli: HttpClient) { 
    this.tablet_couple = new TabletCoupleModule();
  }

  ngOnInit() {
    this.cli.get('http://work.local/grai/api-angular/api/v1/tablet_couples/1.json')
    .subscribe(
      data => { console.log(data) }
    )
    this.cli.post('http://work.local/grai/api-angular/api/v1/tablet_couples/login.json',{
      username: 'xxxxxxxx',
      passoword:  '123456789',
    })
    .subscribe(
      data => { console.log(data) }
    )
  }

Фактическая проблемаявляется то, что вызов GET работает нормально, но вызов POST все еще не работает.

Я уверен, что REST API работает правильно, потому что, если я использую инструмент, такой как Бессонница, ответ будет правильным для обоих вызовов,

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

enter image description here

Я пытаюсь заставить заголовки в Cakephpкак вы можете видеть выше, но все еще не работает.

    public function beforeFilter(\Cake\Event\Event $event)
    {
        parent::beforeFilter($event);
        if($this->request->is('OPTIONS')) {
            $this->response->header('Access-Control-Allow-Origin','*');
            $this->response->header('Access-Control-Allow-Methods','*');
            $this->response->header('Access-Control-Allow-Headers','Content-Type, Authorization');
        }
        else {
            $this->response = $this->response->withHeader("Access-Control-Allow-Origin","*");
            $this->response = $this->response->withHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");
            $this->response = $this->response->withHeader("Access-Control-Allow-Methods","*");
        }
    }

ОБНОВЛЕНИЕ 1

Я нашел библиотеку для интеграции CORS с cakephp: cakephp-cors

Эта помощь, но у меня все еще есть проблема: я не могу использовать Rest API, если они не находятся в одном домене (хорошо CORS), но мне нужно.

ЕСЛИ яразверните приложение и поместите мое угловое приложение в тот же домен, в котором оно работает;но я хочу развернуть приложение, которое может получить доступ к удаленному API REST.

Есть предложения?

1 Ответ

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

Хорошо, у меня были баки с "решением" для @ JensV.

1th :: cakephp 3.1.x слишком стар

Я использую СТАРУЮ версию CakePHP (3.1.14); 3.1.x просто слишком стар, чтобы правильно управлять вызовом метода OPTIONS.

Использование CakePHP 3.7. * С плагином cakephp-cors работает правильно, и теперь я могу сделать удаленный вызов с localhost: 4200.

2-й :: ОПЦИИ метода

Это метод, который причиняет мне столько боли; этот метод вызывается браузерами перед вызовом метода POST.

Правильный ответ при этом методе - HTTP-код 200 с сервера.

Если вы не управляете этим вызовом правильно, браузер усекает вызов POST.

Опять я публикую некоторую ссылку на этот звонок и как найти решение:

Надеюсь, это кому-нибудь поможет.

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