我们有一个 wordpress 网页,我们想以此为 iOs 和 android 制作一个小应用程序。所以我刚刚做了一个API。电话程序员是一名自由职业者,所以此时我没有她的代码,所以这个问题可能会专门讨论,但也许你们中的一些人会知道答案,如果我告诉,我做了什么。
此 API 中有多种方法,但所有方法(登录除外)都需要经过身份验证的用户。
所以我提出了这样的请求(现在是一个工作链接): http ://anydomain.com/service/app_request.php?request=login&username=xxx&password=yyy&trid=zzz
此脚本以:
session_start();
include('../wp-load.php');
因此,当她使用适当的凭据调用脚本时,我会进行登录。
$creds = array();
$creds['user_login'] = $this->getVars['username'];
$creds['user_password'] = $this->getVars['password'];
$creds['remember'] = false;
if (is_ssl()) {
$secure_cookie = true;
} else {
$secure_cookie = false;
}
$user = wp_signon($creds, $secure_cookie);
wp_set_current_user($user->ID);
wp_set_auth_cookie($user->ID, false, false);
$user->data->user_registered = $this->formatDateForApp($user->data->user_registered);
$this->response['user'] = $user->data;
如果我使用桌面浏览器,一切都很好,用户已登录,我可以调用请求。
但是当她尝试使用注销请求时,例如脚本返回,没有用户登录:
require_once(ABSPATH . 'wp-includes/pluggable.php');
$user = wp_get_current_user();
if (empty($user) || empty($user->ID)) {
$this->errorCode = NO_USER_WAS_LOGGED_IN;
$this->errorMsg = 'No user was logged in';
} else {
wp_logout();
$this->response['message'] = $user->data->user_login . " logged out";
}
$this->showResponse();
我不熟悉移动开发,所以我不知道它是如何处理会话的。会不会是问题?或者它可能是一个cookie问题?
另一个奇怪的事情是,如果我调用搜索方法(只需获取一些帖子并在 json 中返回结果),它可以在浏览器中运行,但是当她试图从电话中调用它时,由于某种原因她得到了这个:
<html>
<head>
<meta http-equiv="refresh" content="0; url=http://59.xxx.xxx.xxx" />
</head>
<body>
</body>
</html>
是的,我知道,这似乎太笼统了,如果没有她的代码,将很难找出导致问题的原因,但也许你们中的一些人也有这个问题,并且可以帮助我们。我认为很多人开发了这样的应用程序,需要登录,并保持用户登录。
谢谢你。
更新: 这是一件有趣的事情,我从来没有遇到过这样的问题。开发商位于中国。我通过浏览器检查了该 IP 地址,然后猜测:该页面将她重定向到该页面:
http://59.151.88.32/index.php?source=unicomdns
实际上是什么移动提供商,出于某种原因阻止了她的请求。解决方案可能是代理,或者我不知道,但现在我们知道,这不是我的服务问题,也不是她的程序问题。这是一个整体的中国问题。