Search code examples
wordpressrestwordpress-rest-api

Validate wordpress password repeat with REST api


I have a registeration form with some custom fields and need to register users with Wordpress REST api,

$('#user_register_form').submit(function(e){
    e.preventDefault();

    var form = $(this),
        rest = new DwREST();

    rest.registerUser({
        first_name: '',
        last_name:  '',
        username:   'amin',
        name    :   'amin',
        email   :   'aaaa@amin.ev',
        password:   '11111',
        // passwrod2: '11111' -confirm password field
        // custom_field1: ''
        // ....

    }, function( res ){
        console.log( res );
    });
});

The user registeration works fine but the problem is i can't confirm wether password repeat matches or not, i searched a lot and didn't find an action to modify to /users/ validation

the second question is is it possible to automatically login user created with REST api after registeration?

i appreciate any help.


Solution

  • I searched in rest-api source codes, sadly i didn't find any proper hook to do what i needed, there's just a rest_pre_insert_user hook which getting it to do what i intend to do is a bit tricky, but here's the work around, in case some one has the same problem:

    add_filter('rest_pre_insert_user', function( $user, $request ){
        $params = $request->get_params();
    
        if( $params['password'] !== $params['password2'] ) {
            $error = new WP_Error( 'rest_no_matching_passwords', __( 'Passwords don\'t match' ), array( 'status' => 400 ) );
    
            foreach( $error->error_data as $data ) {
                http_response_code( $data['status'] );
            }
    
            header('Content-Type: application/json; charset=utf-8;');
    
            foreach( $error->errors as $key => $val ){
                $json = json_encode([
                    'code'    => $key,
                    'type'    => 'error',
                    'message' => $val[0]
                ]);
            }
    
            die( $json );
        }
    
        return $user;
    }, 10, 2 );
    

    Reference