[英]How to handle sign up a user error while using Firebase REST API
[英]Wordpress REST API for user sign up (registration)
是否可以创建一个可以通过 WP REST API 工作的注册表单,以便访问者能够在我的网站上创建帐户?
我可以创建这样的表单并使用它来创建新用户。 当我以管理员身份登录时,这适用于 wp_rest nonce。
但是如果有一个没有登录的访问者,同样的表格当然不起作用。 我认为这是一个身份验证问题。 你能提出一个一般的想法,这是如何工作的吗? 如何让访问者能够注册 REST API?
希望你已经找到了答案!
如果没有,只需将以下代码粘贴到您主题的 function.php 中,它应该像魅力一样工作。以下代码应该通过 REST API 将用户注册添加到您的 WordPress 网站。 它支持“订阅者”和“客户”的注册。 源代码也可在Github 上获得。
将它添加到您的 function.php
add_action('rest_api_init', 'wp_rest_user_endpoints');
/**
* Register a new user
*
* @param WP_REST_Request $request Full details about the request.
* @return array $args.
**/
function wp_rest_user_endpoints($request) {
/**
* Handle Register User request.
*/
register_rest_route('wp/v2', 'users/register', array(
'methods' => 'POST',
'callback' => 'wc_rest_user_endpoint_handler',
));
}
function wc_rest_user_endpoint_handler($request = null) {
$response = array();
$parameters = $request->get_json_params();
$username = sanitize_text_field($parameters['username']);
$email = sanitize_text_field($parameters['email']);
$password = sanitize_text_field($parameters['password']);
// $role = sanitize_text_field($parameters['role']);
$error = new WP_Error();
if (empty($username)) {
$error->add(400, __("Username field 'username' is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($email)) {
$error->add(401, __("Email field 'email' is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($password)) {
$error->add(404, __("Password field 'password' is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
// if (empty($role)) {
// $role = 'subscriber';
// } else {
// if ($GLOBALS['wp_roles']->is_role($role)) {
// // Silence is gold
// } else {
// $error->add(405, __("Role field 'role' is not a valid. Check your User Roles from Dashboard.", 'wp_rest_user'), array('status' => 400));
// return $error;
// }
// }
$user_id = username_exists($username);
if (!$user_id && email_exists($email) == false) {
$user_id = wp_create_user($username, $password, $email);
if (!is_wp_error($user_id)) {
// Ger User Meta Data (Sensitive, Password included. DO NOT pass to front end.)
$user = get_user_by('id', $user_id);
// $user->set_role($role);
$user->set_role('subscriber');
// WooCommerce specific code
if (class_exists('WooCommerce')) {
$user->set_role('customer');
}
// Ger User Data (Non-Sensitive, Pass to front end.)
$response['code'] = 200;
$response['message'] = __("User '" . $username . "' Registration was Successful", "wp-rest-user");
} else {
return $user_id;
}
} else {
$error->add(406, __("Email already exists, please try 'Reset Password'", 'wp-rest-user'), array('status' => 400));
return $error;
}
return new WP_REST_Response($response, 123);
}
恕我直言,更好的方法是将附加功能作为单独的插件包含在内。 因此,即使您的用户更改了主题,您的 api 调用也不会受到影响。
因此,我在 WordPress 中通过 REST API 开发了一个用于用户注册的插件。 更好的是,它还支持为 WooCommerce 创建“客户”!
WP REST 用户,如果需要,请查看。
您可以为此使用这两个插件:
WordPress JSON API 插件
和
JSON API 用户
这两个插件都将有助于完成工作。您将需要 nonce ID 来调用由插件提供的注册 API。
这将解释,它是如何工作的!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.