'Wordpress REST API user registration
I am trying to create new user with api v2 but i am getting
{
    "code": "rest_cannot_create_user",
    "message": "Sorry, you are not allowed to create new users.",
    "data": {
        "status": 401
    }
}
as I understand this is due to not sending Nonce headers with the request. But i can't figure out how to get Nonce id.
Solution 1:[1]
as they said in this issue https://github.com/WP-API/WP-API/issues/2252 they are not supporting this feature. I had to create custom endpoint and functionality for signups.
Solution 2:[2]
Use this plug in https://wordpress.org/plugins/json-api-user/
and use this end point to get nonce http://localhost/api/get_nonce/?controller=user&method=register
Then let me know the result. Thanks
Solution 3:[3]
Since the post is from 2018 I would like to write a short update on what possibilities you have at this point.
The plugin JSON API User is still a thing and works great for that purpose.
The second solution I use for some of my customers is WP Webhooks - It is basically an extended webhook functionality that also lets you create users on your website.
Alternatively I use Zapier in combination with some code snippets to push the data through. I do this by setting up a json construct and send it to my website via POST through Zapier.
Solution 4:[4]
If you are working in WP, you can create a nonce and then send it in the request with
wp_create_nonce( 'wp_rest' );
This nonce can you convert to js just using some <?php tags folded by '' and savig in a variable.
const nonce = '<?php echo wp_create_nonce( 'wp_rest' ); ?>'
Sending in request:
fetch("https://your.website.com/wp-json/wp/v2/users", {
            method: "post",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'authorization' : `Basic ${Your_encoded-bit64-username-password}`, 
                'X-WP-Nonce': `${nonce}`
            },
            //make sure to serialize your JSON body
            body: JSON.stringify({your_user_data})})
           .then(res=>res.json())
           .then(res=>console.log(res))
           .catch(err=>console.log(err)) 
Solution 5:[5]
If really you don't care about who can create an account you can:
go -> wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php
find ->
public function create_item_permissions_check( $request ) {
if ( ! current_user_can( 'create_users' ) ) {
    return new WP_Error(
        'rest_cannot_create_user',
        __( 'Sorry, you are not allowed to create new users.' ),
        array( 'status' => rest_authorization_required_code() )
    );
}
and just replace the code to always return true ->
public function create_item_permissions_check( $request ) {
if ( ! current_user_can( 'create_users' ) ) {
    return true;
}
is trickly, but that solve what i need.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Sinan Baymammadli | 
| Solution 2 | Souvik Sikdar | 
| Solution 3 | Jannis | 
| Solution 4 | gustavo catala sverdrup | 
| Solution 5 | Felipe Morales Aliaga | 
