Interactuar con la API GraphQL
Interactuar con la API GraphQLAutenticación de usuario

Autenticación de usuario

La consulta GraphQL que se va a ejecutar puede requerir que el usuario haya iniciado sesión, por ejemplo, para ejecutar una mutación para crear una entrada.

Hay varias formas de autenticar al usuario.

Usando cookies de una sesión ya autenticada en WordPress

Como WordPress utiliza autenticación de usuario basada en cookies, siempre que estemos autenticados en el sitio WordPress, podemos simplemente abrir el cliente GraphiQL y ejecutar consultas GraphQL desde allí.

Como las cookies enviadas a la petición GraphQL son las mismas que las del sitio WordPress, el usuario ya estará autenticado.

Cliente GraphiQL dentro del wp-admin
Cliente GraphiQL dentro del wp-admin

Mutación loginUser

En la misma consulta GraphQL para ejecutar la mutación requerida, podemos utilizar la mutación loginUser para autenticar al usuario.

Por favor, ten en cuenta que el orden importa: loginUser debe añadirse antes de la otra mutación (en este caso, createPost):

mutation {
  loginUser(
    by: {
      credentials: {
        usernameOrEmail: "myusername",
        password: "mypassword"
      }
    }
  ) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
      ...on GenericErrorPayload {
        code
      }
    }
    userID
  }
 
  createPost(input: {
    title: "Hello world!"
    contentAs: {
      html: "<p>How are you?</p>"
    }
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      id
      title
      content
    }
  }
}

Application Passwords

Podemos utilizar las Application Passwords de WordPress para enviar una petición autenticada al endpoint GraphQL.

Por ejemplo, podemos pasar la contraseña de aplicación al ejecutar el comando curl contra el servidor GraphQL, reemplazando los valores USERNAME y PASSWORD:

curl -i \
  --user "USERNAME:PASSWORD" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"query": "{ me { name } }"}' \
  https://mysite.com/graphql

Podemos usar Gato GraphQL para ejecutar peticiones HTTP autenticadas contra otro sitio WordPress.

La consulta de abajo recibe el nombre de usuario y la contraseña de aplicación (y el endpoint al que conectarse), crea la cabecera de autenticación requerida, y ejecuta una consulta contra el servidor GraphQL externo:

query GetDataFromExternalWPSite(
  $username: String!
  $appPassword: String!
  $endpoint: URL!
) {
  loginCredentials: _sprintf(
    string: "%s:%s",
    values: [$username, $appPassword]
  )
    @remove
 
  base64EncodedLoginCredentials: _strBase64Encode(
    string: $__loginCredentials
  )
    @remove
 
  loginCredentialsHeaderValue: _sprintf(
    string: "Basic %s",
    values: [$__base64EncodedLoginCredentials]
  )
    @remove
 
  externalHTTPRequestWithUserPassword: _sendGraphQLHTTPRequest(input:{
    endpoint: $endpoint,
    query: """
  
{
  me {
    name
  }
}
 
    """,
    options: {
      headers: [
        {
          name: "Authorization",
          value: $__loginCredentialsHeaderValue
        }
      ]
    }
  })
}