Я разрабатываю простое приложение iOS
Swift
. Я хочу сделать экран входа в систему для моего приложения, которое будет подключаться к уже существующей базе данных пользователей в 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
) и отправить обратно $ статус iOS
Swift
приложения переменной попку.
Вопрос ответ. Проблема заключалась в плагине WP, который перенаправлял всех нелегальных пользователей из всех ссылок в этом домене, поэтому, когда я вызывал require_once('../wp-blog-header.php');
, я всегда перенаправлялся на главную страницу, и это было причиной неправильного файла JSON со всей разметкой HTML.
с большим удовольствием, но я не могу. Проблема в том, что когда я добавляю функцию аутентификации (которая использует require_once) - я всегда получаю недопустимые теги JSON и html. – fundamental3
Я не знаю php, но я думаю, что ваш недействительный JSON - это просто '0'? Ваш первый PHP-фрагмент возвращает json правильно. Вы можете попытаться вернуть что-то похожее на это в вашем методе проверки подлинности. – Fujia
Проблема заключается в том, что ваш PHP-код не возвращает правильный JSON. – Fujia