【发布时间】:2016-07-15 09:51:27
【问题描述】:
我正在开发一个简单的iOSSwift 应用程序。我想为我的应用程序制作一个登录屏幕,该屏幕将连接到Wordpress 中已经存在的用户数据库。我发现了一些PHP 脚本和Swift 代码。
我正在尝试发布用户名和登录名,检查并返回结果(isUser = true/false or 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"}
但是当我添加检查用户是否注册的功能时 - 我总是得到一个 invalid 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;
}
}
我相信问题出在require_once 函数上。在原始响应中,我得到了很多 html 标签和其他数据,这些数据使我的 JSON 无效。
- 有什么方法可以清除页面并只在
JSON中输出? PHP 中的echo "<script> document.documentElement.innerHTML = ''; </script>";对我没有帮助。也许 jQuery 会有所帮助? - 也许我可以检查用户是否以其他方式注册?
- 也许我可以将结果存储在单独的位置或临时文件中?
- 也许我不应该用 JSON 来包装我的数据,而是用别的东西?
所以我需要将用户名和密码传递给 PHP,使用身份验证函数(使用 require_once)检查它并将 $status 发送回iOS Swift app ass 变量。
问题已回答。
问题出在 WP 插件中,它将所有未登录用户从该域中的所有链接重定向,所以当我调用 require_once('../wp-blog-header.php'); 时,我总是被重定向到主页,这就是带有所有 HTML 标记的错误 JSON 文件的原因。
【问题讨论】:
标签: php ios json swift wordpress