Angular, POST и OPTIONS запросы

Всё что касается построения API
Ответить
anmaslov
Сообщения: 15
Зарегистрирован: 2014.05.15, 12:06

Angular, POST и OPTIONS запросы

Сообщение anmaslov » 2017.11.29, 12:16

Есть небольшой сервис, сам апи работает успешно, завязано андроид приложение.
Вопросы возникли при разработке angular приложения для этого апи.

1. Пробую авторизоваться:

Код: Выделить всё

this.http
      .post(
        'http://localhost/users/login', 
        JSON.stringify({
                  "LoginForm": {
                        "username":'UserLogin',
                        "password":'Userpassword'
                    }
                }),
         config
        )
В config указаны заголовки:
1. Если ни чего не указывать на сервер уходит POST запрос, Request Payload
{LoginForm: {username: "UserLogin", password: "Userpassword"}}

2. Если заголовок указать application/x-www-form-urlencoded на сервер уходит POST запрос с
Form Data
{"LoginForm":{"username":"UserLogin","password":"Userpassword"}}:

3. Если указать в заголовке application/json; charset=utf-8 - на сервер, вместо POST уходит OPTIONS - получаю 403 ошибку, хотя в контроллере указано:

Код: Выделить всё

  
  	// add CORS filter
  	   $behaviors['corsFilter'] = [
                'class' => \yii\filters\Cors::className(),
                'cors' => [
                    'Origin' => ['*'],
                    'Access-Control-Request-Method' => ['POST', 'OPTIONS'],
                    'Access-Control-Request-Headers' => ['*'],
                ],
            ];
И в конфиге:

Код: Выделить всё

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                ['class' => 'yii\rest\UrlRule',
                    'controller' => ['user', 'ticket', 'report'],
                    'extraPatterns' => [
                        'GET search' => 'search',
                        'POST login' => 'login',
                        'POST logout' => 'logout',
                        'GET profile' => 'profile',
                        'OPTIONS login' => 'login',
                    ],
                ],
            ],

но тем не менее всегда ошибка 403!

И собственно вопрос: в первых двух случаях в контроллер всегда приходит пустой запрос:
Yii::$app->getRequest()->getBodyParams(), Yii::$app->request->post(), и даже $_POST - всегда пустые

и как заставить работать OPTIONS (3й случай)?

anmaslov
Сообщения: 15
Зарегистрирован: 2014.05.15, 12:06

Re: Angular, POST и OPTIONS запросы

Сообщение anmaslov » 2017.11.29, 17:43

Первые два случая поборол, добавив в конфиг:

Код: Выделить всё

'parsers' => [
				'application/x-www-form-urlencoded' => 'yii\web\JsonParser',
            ]
Остается открытым вопрос с OPTIONS

undestroyer
Сообщения: 120
Зарегистрирован: 2014.01.06, 13:46

Re: Angular, POST и OPTIONS запросы

Сообщение undestroyer » 2017.12.05, 04:35

Известный баг. PR на ГХ: https://github.com/yiisoft/yii2/pull/14618 Пока разработчики примут исправление, можете унаследовать фильтр и исправить его как в PullRequest'е

Ответить