WordPress REST API 删除用户

问题描述 投票:0回答:2

WordPress REST API 是否可以允许用户删除自己的用户帐户?我需要这个来遵守 GDPR。

提前致谢

wordpress wordpress-rest-api
2个回答
0
投票

一个可能的解决方案是:

add_action('rest_api_init', 'wp_rest_user_delete_endpoint');
/**
 * Register a new user
 *
 * @param  WP_REST_Request $request Full details about the request.
 * @return array $args.
 **/
function wp_rest_user_delete_endpoint($request) {
  /**
   * Handle Register User request.
   */
  register_rest_route('wp/v2', 'users/delete', array(
    'methods' => 'POST',
    'callback' => 'wc_rest_user_endpoint_deleteuser',
  ));
}

#delete User
function wc_rest_user_endpoint_deleteuser($request = null) {
    $parameters = $request->get_json_params();
    $email = sanitize_text_field($parameters['email']);
    $id = sanitize_text_field($parameters['id']);
    $user = get_user_by('email', $email);
    
    if ($user && $id == $user->ID) {
        require_once(ABSPATH . 'wp-admin/includes/user.php');
        wp_delete_user($user->ID);
        return new WP_REST_Response([
            'message' => 'User deleted successfully',
        ], 200);
    } else {
        return new WP_REST_Response([
            'message' => ' User not found',
        ], 400);
    }
}

0
投票

扩展Felix在他的答案中提供的代码我认为这个变体应该在可用性和安全性方面改进代码。使用前面的代码,只要您知道 ID(我不认为它通常是公开的,但安全总比抱歉好)和电子邮件,您就可以删除任何用户。您还必须使用查询参数传递它们。

使用此变体,您不需要传递任何内容,因为它只会删除调用端点的用户帐户,使其理论上也更安全。

欢迎指正,WP不是我的主要职业。

add_action('rest_api_init', 'wp_rest_user_delete_endpoint');
/**
 * Register a new route
 **/
function wp_rest_user_delete_endpoint($request) {
    /**
     * Handles the request.
     */
    register_rest_route('ddevs/v1', 'me', array(
        'methods' => 'DELETE',
        'callback' => 'wc_rest_user_endpoint_deleteuser',
    ));
}

/**
 * The actual user deletion
 */
function wc_rest_user_endpoint_deleteuser($request = null) {

    $id = get_current_user_id();

    // If the id is 0 it means the user is not logged in.
    if ($id != 0) {
        require_once(ABSPATH . 'wp-admin/includes/user.php');
        wp_delete_user($id);
        return new WP_REST_Response([
            'message' => 'User deleted successfully',
        ], 200);
    } else {
        return new WP_REST_Response([
            'message' => "User not authenticated.",
        ], 400);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.