2016-07-15 2 views
0

Я разрабатываю простое приложение iOSSwift. Я хочу сделать экран входа в систему для моего приложения, которое будет подключаться к уже существующей базе данных пользователей в Wordpress. Я нашел несколько сценариев PHP и код Swift.Недействительный JSON требует Swift iOS

Я пытаюсь опубликовать имя пользователя и войти, проверьте его и возвращает результат (isUser = истина/ложь или 1/0)

Вот PHP скрипт

<?php 
// Read request parameters 
$username= $_REQUEST["username"]; 
$password = $_REQUEST["password"]; 
// Store values in an array 
$returnValue = array("username"=>$username, "password"=>$password); 
// Send back request in JSON format 
echo json_encode($returnValue); 
?> 

и Swift функция

func getPHPJson() { 

    let urlPath: String = "LINK_TO_PHP_FILE?username=\(user)&password=\(pass)" 
    let url: NSURL = NSURL(string: urlPath)! 
    let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) 

    request1.HTTPMethod = "GET" 
    let queue:NSOperationQueue = NSOperationQueue() 

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in 

    do 
    { 
     if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary 
     { 
      print(jsonResult) 
      //print(jsonResult["isUser"] as! Bool) 
      let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("raw response: \(responseString!)") 
     } 
    } catch let error as NSError 
    { 
     print(error.localizedDescription) 
     print("error") 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("raw response: \(responseString)") 
    } 
    }) 
} 

Это дает мне желаемый результат.

ВЫВОД

{ 
    password = iosappusettest1; 
    username = iosappusettest; 
} 
raw response: {"username":"iosappusettest","password":"iosappusettest1"} 

Но когда я добавить функцию, чтобы проверить, если пользователь зарегистрирован - я всегда получаю недопустимый JSON

здесь PHP функция

function authentication ($user, $pass){ 
    global $wp, $wp_rewrite, $wp_the_query, $wp_query; 

    if(empty($user) || empty($pass)){ 
    return 0; 
    } else { 
    require_once('../wp-blog-header.php'); 
    $status = 0; 
    $auth = wp_authenticate($user, $pass); 
    if(is_wp_error($auth)) {  
     $status = 0; 
    } else { 
     $status = 1; 
    } 
    return $status; 
    } 
} 

I считаю, что проблема require_once функция. В сыром ответе я получаю много тегов html и других данных, которые делают мой JSON недействительным.

  • Есть ли способ очистить страницу и вывести ее только в JSON? echo "<script> document.documentElement.innerHTML = ''; </script>"; в PHP не помог мне. может быть, jQuery поможет?
  • Возможно, я могу проверить, зарегистрирован ли пользователь по-другому?
  • Возможно, я могу сохранить результат в отдельном месте или временном файле?
  • Может быть, я должен обернуть свои данные не в JSON, а что-то еще?

Так что мне нужно передать имя пользователя и пароль для PHP, проверить его с помощью функции аутентификации (который использует require_once) и отправить обратно $ статус iOSSwift приложения переменной попку.

Вопрос ответ. Проблема заключалась в плагине WP, который перенаправлял всех нелегальных пользователей из всех ссылок в этом домене, поэтому, когда я вызывал require_once('../wp-blog-header.php');, я всегда перенаправлялся на главную страницу, и это было причиной неправильного файла JSON со всей разметкой HTML.

ответ

0

Сохраните свой ответ в чистом JSON и оставьте любые теги html, поскольку они не нужны вашим ios end.

+0

с большим удовольствием, но я не могу. Проблема в том, что когда я добавляю функцию аутентификации (которая использует require_once) - я всегда получаю недопустимые теги JSON и html. – fundamental3

+0

Я не знаю php, но я думаю, что ваш недействительный JSON - это просто '0'? Ваш первый PHP-фрагмент возвращает json правильно. Вы можете попытаться вернуть что-то похожее на это в вашем методе проверки подлинности. – Fujia

+0

Проблема заключается в том, что ваш PHP-код не возвращает правильный JSON. – Fujia

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