我们有一个wordpress网页,我们想用它为iOs和android制作一个小应用程序。所以我刚刚做了一个API。电话程序员是一个自由职业者,所以现在我还没有她的代码,所以这个问题可能会被专门讨论,但也许你们中的一些人会知道答案,如果我告诉你,我做了什么。
这个API中有几种方法,但所有这些方法(除了登录)都需要经过身份验证的用户。
所以我提出了这样的请求(现在是一个工作链接):http://anydomain.com/service/app_request.php?request=login&用户名=xxx&密码=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();
我不熟悉移动开发,所以我不知道它是如何处理会话的。可能是问题吗?或者可能是饼干的问题?
另一件奇怪的事情是,如果我调用搜索方法(只需获取一些帖子并以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
实际上是移动提供商,出于某种原因阻止了她的请求。解决方案可能是代理,或者我不知道,但现在我们知道,这不是我的服务问题,也不是她的程序问题。总的来说,这是中国人的问题。
好吧,至少我发现了问题。我写了一个小应用程序,什么是尝试使用这些请求。正如我提到的,在浏览器中一切都很好。
到现在为止,我从未尝试过从android使用net,但现在我做到了,当我想登录用户时,logcat说:
07-16 12:52:42.890:W/ResponseProcessCookies(9125):Cookie被拒绝:"BasicClientCookie[版本=0,名称=wordpress_d0c0d54098055ddfb5fe7a1313b4d3b5,域=.anydomain.com,路径=/wp-content/plugins,过期=null]"。非法的路径属性"/wp-content/plugins"。来源路径:"/service/app_request.php"
所以那是你的开发者不能登录用户的电话。。。
不幸的是,我不熟悉android在这个深度,所以我不知道这个解决方案。我在这里检查了cookie问题:Java HtmlUnit-can';t登录wordpress但是现在我不知道如何实现cookie处理。