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.

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/graphqlPodemos 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
}
]
}
})
}