Autenticazione utente
La query GraphQL da eseguire può richiedere che l'utente abbia effettuato il login, ad esempio per eseguire una mutation che crea un post.
Esistono diversi modi per autenticare l'utente.
Utilizzo dei cookie di una sessione già autenticata in WordPress
Poiché WordPress utilizza un'autenticazione utente basata sui cookie, ogni volta che abbiamo effettuato il login al sito WordPress, possiamo semplicemente aprire il client GraphiQL ed eseguire query GraphQL da lì.
Poiché i cookie inviati alla richiesta GraphQL sono gli stessi del sito WordPress, l'utente avrà già effettuato il login.

Mutation loginUser
Nella stessa query GraphQL per eseguire la mutation richiesta, possiamo usare la mutation loginUser per autenticare l'utente.
Si noti che l'ordine è importante: loginUser deve essere aggiunto prima dell'altra mutation (in questo 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
Possiamo usare le Application Passwords di WordPress per inviare una richiesta autenticata all'endpoint GraphQL.
Ad esempio, possiamo passare la password dell'applicazione durante l'esecuzione del comando curl contro il server GraphQL, sostituendo i valori USERNAME e PASSWORD:
curl -i \
--user "USERNAME:PASSWORD" \
-X POST \
-H "Content-Type: application/json" \
-d '{"query": "{ me { name } }"}' \
https://mysite.com/graphqlPossiamo usare Gato GraphQL per eseguire richieste HTTP autenticate contro un altro sito WordPress.
La query qui sotto riceve il nome utente e la password dell'applicazione (oltre all'endpoint a cui connettersi), crea l'header di autenticazione richiesto ed esegue una query contro il server GraphQL esterno:
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
}
]
}
})
}