如何使用 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-Nonce”添加为 http 请求的标头

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

原文由 Semyon Tikhonenko 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 813
1 个回答

身份验证 章节,在 REST API 手册 中:

Cookie 身份验证是 WordPress 附带的基本身份验证方法。当您登录到仪表板时,这会为您正确设置 cookie,因此插件和主题开发人员只需要有一个登录用户即可。

但是,REST API 包含一种称为 nonces 的技术来避免 CSRF 问题。这可以防止其他站点在您没有明确意图的情况下强迫您执行操作。这需要对 API 进行稍微特殊的处理。

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

对于发出手动 Ajax 请求的开发人员,随机数将需要与每个请求一起传递。 API 使用随机数并将操作设置为 wp_rest 。然后可以通过 _wpnonce 数据参数(POST 数据或在 GET 请求的查询中)或通过 X-WP-Nonce 标头将这些传递给 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' );

因此,您很可能在测试自定义端点时忘记了 nonce 部分

希望能帮助到你!

原文由 birgire 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏