我正在尝试编写一个允许某人登录Wordpress的Wordpress REST API控制器。
为了测试目的,我编写了以下代码:
&
如果直接通过浏览器访问api,这段代码很有效。在我的浏览器上输入后:
add_action( 'rest_api_init', function () {
register_rest_route( 'login/v1', '/username/(?P<username>[a-zA-Z0-9-]+)', array(
'methods' => 'GET',
'callback' => 'rest_login',
) );
} );
function rest_login( $data ) {
$user = get_user_by( 'login', $data['username'] );
if ($user) {
wp_set_auth_cookie( $user->ID );
return $user->ID;
}
else {
return "invalid username";
}
}
浏览器已登录,我可以通过用户http://wordpress.localhost/wp-json/login/v1/username/alan
访问wp-admin端。
但是,我必须从其他网站访问此API方法。我的第一次尝试是使用cURL来完成它,如https://wordpress.stackexchange.com/questions/36452/creating-login-session-via-curl
中所述alan
cookie.txt文件填充了以下内容:
$cookie_file = "cookie.txt";
$process = curl_init('http://wordpress.localhost/wp-json/login/v1/username/alan');
curl_setopt($process, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($process, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($process, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($process);
curl_close($process);
$result = json_decode($return, true);
我可以做我想做的事吗?如果是的话,我做错了什么?
最好的, 阿兰