Ajax-запрос с плагином Cors в Chrome - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь сделать cors ajax-запрос для пользователей / логин для аутентификации пользователя и отправки обратно токена JWT. Запрос опций возвращает 200, тогда как пост-запрос возвращает 403, запрещенных с ошибкой «Missing CSRF cookie». Я использую плагин Cors Chrome. На моем UsersController.php внутри его функции инициализации у меня есть $this->Auth->allow(['login']);

Сервер Cakephp на локальном хосте: 8765 с «сервером тортов», а сервер extjs запущен на http://localhost:1841/ с «Sencha app watch»

LoginController.js

onLoginClick: function() {
        this.getView().mask('Effettuando il login..');
        var data = this.getView().down('form').getValues();
        App.security.Firewall.login(data.username, data.password).then(function() {
            this.getView().destroy();

            Ext.create({
                xtype: 'app-main'
            });
            this.getView().unmask();
        }.bind(this), function(data) {
            Ext.Msg.alert('Errore', data.message || 'Impossibile eseguire il login in questo momento.');
        });
    }

Firewall.js

 login: function(username, password) {
        var deferred = new Ext.Deferred();
        Ext.Ajax.request({
            url: 'http://localhost:8765/users/login',
            method: 'POST',
            params: {
                'username': username,
                'password': password
            },
            success: function (response) {
                var data = Ext.decode(response.responseText);
                if (data.token) {
                    App.security.TokenStorage.save(data.token);

                    deferred.resolve(data, response);
                } else {
                    deferred.reject(data, response);
                }
            },

            failure: function (response) {
                var data = Ext.decode(response.responseText);

                App.security.TokenStorage.clear();

                deferred.reject(data, response);
            }
        });

        return deferred.promise;
    },

Вот как я загрузил плагин JWT Auth

 $this->loadComponent('Auth', [
            'storage' => 'Memory',
            'authenticate' => [
                'ADmad/JwtAuth.Jwt' => [
                    'userModel' => 'Users',
                    'fields' => [
                        'username' => 'id'
                    ],

                    'parameter' => 'token',

                    // Boolean indicating whether the "sub" claim of JWT payload
                    // should be used to query the Users model and get user info.
                    // If set to `false` JWT's payload is directly returned.
                    'queryDatasource' => true,
                ]
            ],

            'unauthorizedRedirect' => false,
            'checkAuthIn' => 'Controller.initialize',

            // If you don't have a login action in your application set
            // 'loginAction' to false to prevent getting a MissingRouteException.
            'loginAction' => [
              'controller' => 'Users',
              'action' => 'login',
          ],
        ]);

и, наконец, это пользовательский маршрут

Router::scope('/users', function ($routes) {
    $routes->setExtensions(['json']);
    $routes->resources('Users');    
}); 

вкладка «Параметры» сети:

ОБЩИЙ

Request URL: http://localhost:8765/users/login
Request Method: OPTIONS
Status Code: 200 OK
Remote Address: [::1]:8765
Referrer Policy: no-referrer-when-downgrade

ГОЛОВКИ ОТВЕТА

Access-Control-Allow-Headers: x-requested-with
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin: *
Allow: POST, GET, OPTIONS, PUT, DELETE
Connection: close
Content-type: text/html; charset=UTF-8
Date: Wed, 03 Jul 2019 14:44:03 +0000
Host: localhost:8765
X-Powered-By: PHP/7.1.26

ЗАПРОСИТЕ ЗАГОЛОВКИ

Provisional headers are shown
Access-Control-Request-Headers: x-requested-with
Access-Control-Request-Method: POST
Origin: http://localhost:1841
Referer: http://localhost:1841/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36

вкладка "пост" в сети:

ОБЩИЙ

Request URL: http://localhost:8765/users/login
Request Method: POST
Status Code: 403 Forbidden
Remote Address: [::1]:8765
Referrer Policy: no-referrer-when-downgrade

ГОЛОВКИ ОТВЕТА

Access-Control-Allow-Headers: x-requested-with
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin: *
Allow: POST, GET, OPTIONS, PUT, DELETE
Connection: close
Content-Type: text/html; charset=UTF-8
Date: Wed, 03 Jul 2019 14:44:08 +0000
Host: localhost:8765
X-DEBUGKIT-ID: 6d9d2319-d3a6-4022-a877-fb404d639081
X-Powered-By: PHP/7.1.26

ЗАПРОСИТЕ ЗАГОЛОВКИ

Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://localhost:1841
Referer: http://localhost:1841/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
X-Requested-With: XMLHttpRequest

Я просто хочу аутентифицировать пользователя, который пытается войти в систему и отправить обратно клиенту свой токен JWT. На данный момент запрос даже не достигает функции входа в систему. Это первый раз, когда я пытаюсь сделать систему входа в систему

...