如何使用Wordpress Rest Api获取当前登录的用户?

问题描述:

我试图添加一个自定义请求。如何使用Wordpress Rest Api获取当前登录的用户?

add_action('rest_api_init', function() { 
    register_rest_route('custom', '/login', array(
     'methods' => 'GET', 
     'callback' => function(WP_REST_Request $request) { 
      return wp_get_current_user(); 
     } 
    )); 
}); 

但它总是返回ID = 0的用户; 我也试过这个:

add_action('rest_api_init', function() { 
    register_rest_route('custom', '/login', array(
     'methods' => 'GET', 
     'callback' => function(WP_REST_Request $request) { 
      return is_user_logged_in(); 
     } 
    )); 
}); 

它总是返回false。 但用户登录确定。

我将自己的自定义登录

add_action('rest_api_init', function() { 
    register_rest_route('custom', '/login', array(
     'methods' => 'POST', 
     'callback' => function(WP_REST_Request $request) { 
      $nonce = wp_create_nonce("wp_rest"); 
      $user = wp_signon(array('user_login' => $_POST['username'], 
       'user_password' => $_POST['password'], "rememberme" => true), false); 
      if (is_wp_error($user)) { 
       return $user; 
      } 

      //do_action('wp_login', "capad"); 
      //$user['isloggedin'] = is_user_logged_in(); 
      return array('user' => $user, 
       'nonce' => $nonce); 
     } 
    )); 
}); 

和我添加 “X-WP-随机数” 为标题的HTTP请求

现在每个请求输出:{"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}

+2

你得到这个工作?你能发布解决方案吗?谢谢 – raison

Authentication一章,在REST API手册

Cookie认证是包含在 WordPress中的基本认证方法。当您登录仪表板时,会为您正确设置Cookie ,因此插件和主题开发人员只需拥有 登录用户即可。

但是,REST API包含一种名为nonces的技术以避免CSRF 问题。这可以防止其他网站强制您执行操作 而无需明确打算这么做。这需要对API进行稍微特殊的 处理。

对于使用内置JavaScript API的开发人员,这将自动为您处理 。这是推荐使用API​​的 插件和主题。自定义数据模型可以扩展wp.api.models.Base 以确保对于任何自定义请求都可以正确发送。

对于开发人员进行手动Ajax请求,每个请求传递的随机数将需要为 。 API使用随机数,动作设置为 wp_rest。然后可以通过_wpnonce数据 参数(POST数据或GET请求查询中)或头文件将这些数据传递给API。

这里有一个GET例如:

https://example.tld/wp-json/wp/v2/users/me?_wpnonce=9467a0bf9c 

或在您的情况:

https://example.tld/wp-json/custom/login/?_wpnonce=9463a0bf9c 

,其中随机数是从

wp_create_nonce('wp_rest'); 

创建那么很有可能你忘记了现时部分 w母鸡测试你的自定义端点。

希望它有帮助!

+0

我试过你的解决方案,我更新了我的文章。你能帮忙吗? –

+1

随机数必须随客户请求一起提供,而不是在其余服务器的响应中生成。例如,首先尝试使用客户端发送nonce的'/ wp-json/wp/v2/users/me /'端点,并让它显示当前的用户信息。 @SemyonTikhonenko – birgire

+2

“该API使用随机动作设置为'wp_rest'”是的,我总是改变它,并把它搞砸了。 – WraithKenny

如果您更喜欢使用JWT Authentication for WP REST API,那么使用Json Web令牌可能更容易实现。

首先,您验证客户端发送一个HTTP POST请求到端点/WP-JSON/JWT-AUTH/V1 /令牌发送用户名密码域生成一个身份验证令牌。

一个succefull的反应是相似的:

{ 
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8", 
    "user_display_name": "admin", 
    "user_email": "[email protected]", 
    "user_nicename": "admin" 
} 

然后传递令牌的每个请求设置请求头授权,如:

Authorization: Bear eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8