2015-03-16 2 views
0

Я новичок в angularjs. Я сделал простое приложение для проверки подлинности, отправив учетные данные пользователя, то есть имя пользователя и пароль на сервер (который написан на php) через почтовый запрос. Но странная часть заключается в том, что с сервера я не могу получить данные с помощью $ _POST, вместо этого я могу получить его через $ _GET. Я также проверил другие части, а также CORS и не обнаружил ошибок. Будет оценено руководство. Благодарю.Извлечение Angularjs Http Почтовые данные

Вот мой угловой фабричный метод:

app.factory("loginFact", function($http){ 
    this.user = { 
     isAuthenticated: false, 
     name: "", 
     token: "" 
    } 


    this.makeLoginRequest = function(user,pass) { 

     var req = { 
      method: 'post', 
      url: 'http://localhost/login/authenticate.php', 
      headers: { 
       'Content-Type': "multipart/form-data" 
      }, 
      params: { username: user, password:pass } 
     } 


     $http(req).success(function(data){ 
      console.log("Success: " + data) 
     }).error(function (data) { 
      console.log("Error: " + data) 
     }); 
    } 

    return{ 
     makeLoginRequest: this.makeLoginRequest 
    } 

}); 

Вот мой сервер часть:

<?php 
header('Accept-Charset: utf-8'); 
header('Connection: keep-alive'); 
header('Content-Type: multipart/form-data,'); 
header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, POST'); 
header('Access-Control-Allow-Headers: accept, content-type'); 
header('Access-Control-Request-Headers: X-Requested-With, accept, content-type'); 


try{ 


     if(($_POST["username"] == "test") && ($_POST["password"] == "test")){ 
       echo "{\"id\": \"700\", \"user\": {  \"uid\": \"123456\",  \"role\": \"admin\", \"name\": \"waqar\" }}"; 
       return; 
     }else{ 
       echo "phase1: invalid username/password"; 
       return; 
     } 
}catch(Exception $e){ 
     echo $e->getMessage(); 
} 

try{ 
     $request_body = file_get_contents('php://input'); 
     $data = json_decode($request_body); 

     if($data->username == "test" && $data->password == "test"){ 
       echo "{\"id\": \"700\", \"user\": {  \"uid\": \"123456\",  \"role\": \"admin\", \"name\": \"waqar\" }}"; 
       return; 
     } 
     else{ 
       echo "phase2: Invalid username/password"; 
       return; 
     } 
}catch(Exception $e){ 
     echo $e->getMessage(); 
     return; 
} 

?> 

ответ

0

Посылая данные в params объекте данные будут посылать в заголовки в качестве параметров запроса (в URL-адресе - ?key1=value1&key2=value2).

Вместо этого вы должны отправить их в организме с помощью ключа data объекта:

var req = { 
    method: 'post', 
    url: 'http://localhost/login/authenticate.php', 
    headers: { 
     'Content-Type': "multipart/form-data" 
    }, 
    data: { username: user, password:pass } 
} 

Регулярно проверяйте documentation для более подробной информации.

Если я правильно понял, в комментарии вы спрашиваете: зачем вводить параметры в тело запроса, а не в URL?

Вы можете отправить их в URL, но вы будете иметь некоторые недостатки:

  • Кодирование лучше в теле, чем в URL
  • Вы можете отправить больше данных в теле, так как длина URL в это обычно ограничен (зависит от системы, но около 2000 символов)
  • Обмануть URL-адрес
  • Системы обычно сохраняют URL-адрес в своих журналах, поэтому вы рискуете подвергать счета своего клиента, если кто-то видит журналы (подумайте, что они будет сохранен в обычном тексте, даже если вы encryp т/хэш их в базе данных)
  • Учитывая предыдущий момент, в некоторых странах было бы незаконным регистрировать конфиденциальные данные.
+0

Спасибо, что работает сейчас. Также мне пришлось бы использовать метод Post для аутентификации, но что, если я хочу отправить данные в формате Query String так же, как метод Get? – iConfused

+0

Я обновил ответ, так как мне не разрешено писать слишком много здесь. – razvanz

Смежные вопросы