¿Iniciar sesión de WordPress con la API REST?

2 minutos de lectura

Chicos, estoy tratando de crear un punto final con la API REST que registrará al usuario que va al punto final. ¿Alguna idea sobre cómo hacerlo correctamente? Esto es lo que tengo hasta ahora:

function mm_login_user( $request = null ) {
    $response = array();
    $parameters = $request->get_json_params();

    isset( $parameters[ 'user_login' ] ) ? $user_login = sanitize_text_field( $parameters[ 'user_login' ] ) : $user_login = '';
    isset( $parameters[ 'user_password' ] ) ? $user_password = sanitize_text_field( $parameters[ 'user_password' ] ) : $user_password = '';

    $error = new WP_Error();

    if ( empty( $user_login ) ) {
        $error->add( 400, __( "user_login field is required.", 'mm' ), array( 'status' => 400 ) );
        return $error;
    }

    if ( empty( $user_password ) ) {
        $error->add( 400, __( "user_password field is required.", 'mm' ), array( 'status' => 400 ) );
        return $error;
    }

    $creds = array(
        'user_login'    => $user_login,
        'user_password' => $user_password,
        'remember'      => true
    );

    $user = wp_signon( $creds, false );

    if ( is_wp_error( $user ) ) {
        $error->add( 400, __( "Invalid Username or Password.", 'mm' ), array( 'status' => 400 ) );
        return $error;
    }

    wp_set_current_user( $user->ID );
    $auth_cookie = wp_generate_auth_cookie( $user->ID, mm_keep_me_logged_in_for_1_year(), 'auth' );
    $auth_cookie_logged_in = wp_generate_auth_cookie( $user->ID, mm_keep_me_logged_in_for_1_year(), 'logged_in' );
    $response[ 'auth_cookie' ] = $auth_cookie;
    $response[ 'auth_cookie_logged_in' ] = $auth_cookie_logged_in;
    $response[ 'wp_nonce' ] = wp_create_nonce( 'wp_rest' );
    $response[ 'code' ] = 200;
    $response[ 'message' ] = __( "User Logged In.", "mm" );
    set_transient( 'user_id', $user->ID );

    return new WP_REST_Response( $response, 200 );
}

El problema aquí es que si intento registrar al usuario aquí con:

wp_set_current_user( $transient, $user->user_login );
wp_set_auth_cookie( $transient, true );

Los servidores lanzan 502. Es por eso que configuré un transitorio que luego uso para iniciar sesión en el usuario en “template_redirect”, pero el problema aquí es cuando el usuario inicia sesión y alguien más usa el punto final, patea al usuario actual y ahora todos están registrado como el último usuario que ha utilizado el punto final. Ayuda por favor estoy atascado :((

  • tal vez intente autenticación básicao usarlo como punto de partida, otra solución basada en tokens y códigos QR es qr-usuario-login

    – Hyyan Abo Fakher

    19 de julio de 2018 a las 14:48


  • Códigos QR?? ¿Eh?

    – Greg Burkett

    19 de julio de 2018 a las 16:29

  • También inicio sesión para la API de descanso para el teléfono móvil para exponer API como inicio de sesión.registro,contraseña perdida,editar perfil. si hay alguna solucion. por favor publique aquí. sera de gran ayuda para mi.

    -Pramod Kharade

    10 de junio de 2019 a las 5:45

  • La solución es bastante larga y todo lo que puedo hacer es publicar un enlace aquí: github.com/YuxelOsmanow/wp-login-user-via-api

    – Yuxel Yuseinov

    28 ago. 2019 a las 16:30

¿Ha sido útil esta solución?