Cómo iniciar sesión mediante la API de WordPress y obtener detalles del usuario

19 ago 2018, 05:33:04
Vistas: 17.2K
Votos: 1

Quiero iniciar sesión mediante la API de WordPress. Intenté con "/wp-json/wp/v2/users", pero solo devuelve los detalles del usuario 1.

Mi objetivo es iniciar sesión mediante la API y obtener toda la información del perfil.

1
Todas las respuestas a la pregunta 3
0

1. Instala y activa el plugin JWT Authentication for WP REST API, también instala el plugin WP REST API
2. Ahora puedes ejecutar cualquier API por defecto de WordPress desde una aplicación móvil o cualquier otra fuente o mediante Postman. Por ejemplo, accede a esta URL desde tu app o Postman: https://example.com/wp-json/wp/v2/posts
3. Mediante la app o Postman, cuando inicies sesión con credenciales válidas (usando la API REST) recibirás un token. Para iniciar sesión y obtener el token, ejecuta la siguiente URL en Postman o desde la app: https://example.com/wp-json/jwt-auth/v1/token
4. De esta manera obtendrás un token como se muestra en la imagen Postman y autenticación JWT
Ahora utiliza este token para obtener los detalles del usuario conectado, por ejemplo
5. Crea la siguiente función en functions.php

function checkloggedinuser()
{
$currentuserid_fromjwt = get_current_user_id();
print_r($currentuserid_fromjwt);
exit;
}

 add_action('rest_api_init', function ()
{
  register_rest_route( 'testone', 'loggedinuser',array(
  'methods' => 'POST',
  'callback' => 'checkloggedinuser'
  ));
});


6. Ahora ejecuta esta nueva URL en Postman o en la app para obtener los detalles del usuario conectado. https://example.com/wp-json/testone/loggedinuser (reemplaza example.com con tu URL) Detalles del usuario conectado

26 ene 2019 23:39:43
0

Hola, tengo una solución más rápida y mejor para obtener el ID y más información como el avatar del usuario.

Solo añade esto a tu archivo functions.php:

/*
 * Inserta datos adicionales al plugin JWT Auth
 */
function jwt_auth_function($data, $user) { 
    $data['user_role'] = $user->roles; 
    $data['user_id'] = $user->ID; 
    $data['avatar']= get_avatar_url($user->ID);
    return $data; 
} 
add_filter( 'jwt_auth_token_before_dispatch', 'jwt_auth_function', 10, 2 );

Referencia: Cómo obtener el ID de usuario via API

Espero que esto te ayude

24 jun 2020 16:39:59
7
-3

Resuelto:

add_action( 'rest_api_init', 'register_api_hooks' );
function register_api_hooks() {
  register_rest_route(
    'custom-plugin', '/login/',
    array(
      'methods'  => 'POST',
      'callback' => 'login',
    )
  );
}
function login($request){
    $creds = array();
    $creds['user_login'] = $request["username"];
    $creds['user_password'] =  $request["password"];
    $creds['remember'] = true;
    $user = wp_signon( $creds, true );


    if ( is_wp_error($user) )
      echo $user->get_error_message();

    $id = $user->ID;
    $meta = get_user_meta($id);

    return $meta;
}
19 ago 2018 06:54:35
Comentarios

Esto es muy inseguro. Estás enviando el nombre de usuario y contraseña abiertamente en la URL.

Jacob Peattie Jacob Peattie
19 ago 2018 07:23:45

En realidad, quiero llamarlo desde Android.

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
19 ago 2018 07:30:54

No importa. Por favor lee el enlace a la documentación que publiqué como comentario. Hay formas adecuadas y más seguras de hacer esto.

Jacob Peattie Jacob Peattie
19 ago 2018 07:33:36

@JacobPeattie ¿Estaría bien si usamos POST en lugar de GET? El enlace de documentación de WP que compartiste fue el primer lugar que consulté, pero no parece cubrir nada sobre cómo iniciar sesión.

Betty Betty
30 mar 2019 03:42:34

@Jacob, datos con método POST. Así es seguro.

Mohammad Shahnewaz Sarker Mohammad Shahnewaz Sarker
21 oct 2019 11:27:18

Esto podría funcionar para nuestro caso de uso, que es permitir que los usuarios de nuestra aplicación de servidor inicien sesión de forma transparente con sus credenciales de Wordpress. Básicamente pasaríamos los detalles servidor-a-servidor a WP para autenticar al inicio de la sesión, y luego almacenaríamos en caché los detalles del usuario en nuestra base de datos. Así que solo hacemos autenticación básica una vez por sesión a través de una conexión confiable, evitando los problemas de seguridad, ya que el dispositivo cliente solo envía las credenciales una vez. Como medida de seguridad adicional, requeriremos una clave secreta compartida ya sea en el encabezado o como parte de la solicitud.

james-geldart james-geldart
1 oct 2021 15:49:16

En realidad, una mejor solución (para nuestro caso de uso) podría ser utilizar wp_authenticate en lugar de wp_signon, ya que así no se creará una sesión de inicio de sesión que en teoría podría ser secuestrada

james-geldart james-geldart
1 oct 2021 15:55:44
Mostrar los 2 comentarios restantes