Переменные $ _REQUEST не обрабатываются моим PHP-скриптом в моем пользовательском REST API при отправке из angular js - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть угловое js-приложение, которое пытается войти в систему и отправляет $ _REQUEST ['email'] и $ _REQUEST ['password'] в мой PHP-скрипт, но скрипт сообщает о неопределенном индексе: электронная почта, а такжеНеопределенный индекс: пароль.

Я попытался просто вставить 'email' и 'password' прямо, без разбора с угла, и это не работает;Я также попытался отправить письмо и пароль от простого старого запроса ajax в jQuery к сценарию, и это работает, я получаю токен обратно;это просто не работает с угла или не реагирует.

html:

<form>
    <p><span class="sr-only"><label for="email">Email</label></span><input class="form-control" type="text" class="txt" placeholder="Email" ng-model="user.email" name="email" id="email"></p>
    <p><span class="sr-only"><label for="password">Password</label></span><input class="form-control" type="password" class="txt" placeholder="Password" ng-model="user.password" name="password" id="password"></p>    
    <p><input type="submit" id="_submit" value="Login" class="btn-info" ng-click="login(user)"/></p>
</form>

угловой сценарий входа в систему:

    $scope.login = function(user) {
        $scope.showError = false;
        $scope.showValidationError = false;
        $scope.showRateError = false;
        $scope.showNoUserError = false;

        if(angular.isUndefined(user)) {
            $scope.showValidationError = true;
            $state.go('login');
        }

        $http.post("https://myapi.com/login", { email: user.email, password: user.password })
        .then(function (result) {
            $state.go('dash');
        }, function(error) {
            if(error.status == 401) {
                $scope.showError = true;
            }
            if(error.status == 403) {
                $scope.showRateError = true;
            }
            if(error.status == 422) {
                $scope.showValidationError = true;
            }
            if(error.status == 500) {
                $scope.showInternalError = true;
            }
            console.log("login: " + error.status + " " + error.statusText);
        });
    }

Когда сценарий попадает в тире, он пытается обновить, и я получаю эту ошибку:

Error: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'Bearer 
Notice: Undefined index: email in /var/www/html/script.php on line 713
Notice: Undefined index: password in /var/www/html/script.php on line 714

Я пытался установить CORS как в своем php-скрипте, так и в Apache

В верхней части script.php:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');

В части конфигурации vhost:

<Directory /var/www/html>
    Header set Access-Control-Allow-Origin "*"
</Directory>

Если я отправляю запрос из jQuery, он работает нормально:

$(document).ready(function() {
    $("#login").click(function() {
        var email = $("#email").val();
        var password = $("#password").val();
        var formData = {email: email, password: password};
        $.ajax({
            url: "https://myapi.com/login",
            type: "POST",
            data: formData,
            success: function(data, textStatus, jqXHR)
            {
                console.log(textStatus);
                console.log(data);
                if(data != "") {
                    var data = JSON.parse(data);
                    console.log(data.token);
                    $("#token").html(data.token);
                }
            },
            error: function(jqXHR, textStatus, errorThrown)
            {
                console.log(textStatus);
                console.log(errorThrown);
            }
        });
    });
});

Не знаю, какие другие действия по устранению неполадок сделать здесь.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 декабря 2018

Я не уверен, откуда вы получаете электронную почту и пароль.Если это из формы, то вы должны использовать ng-model в input html.

<form>
<input type="email" ng-model="formData.email"/>
<input type="password" ng-model="formData.pasword"/>
<button ng-click="processForm()">Submit</button>
</form>

Тогда в угловом контроллере,

$scope.processForm= function() {    

    var request = $http({
        method: "post",
        url: "https://myapi.com/login",
        data: $scope.formData,
        headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    });

    request.then(       

        function (data) {
            //Success       

        },

        function(data) {
            // Handle error here
            console.log(data.error);
            console.log("Error occured in processing POST data");
        }

    );

};

Вы просто не можете использоватьадрес электронной почты и пароль от имен форм.Вам нужно будет привязать их к области видимости angularJS.

...