Authentification utilisateur
La requête GraphQL à exécuter peut nécessiter que l'utilisateur soit connecté, par exemple pour exécuter une mutation afin de créer un article.
Il existe plusieurs façons d'authentifier l'utilisateur.
Utilisation des cookies d'une session déjà authentifiée dans WordPress
Comme WordPress utilise une authentification utilisateur basée sur les cookies, dès lors que nous sommes connectés au site WordPress, nous pouvons simplement ouvrir le client GraphiQL et exécuter des requêtes GraphQL depuis là.
Comme les cookies envoyés à la requête GraphQL sont les mêmes que ceux du site WordPress, l'utilisateur sera déjà connecté.

Mutation loginUser
Dans la même requête GraphQL pour exécuter la mutation requise, nous pouvons utiliser la mutation loginUser pour authentifier l'utilisateur.
Veuillez noter que l'ordre est important : loginUser doit être ajouté avant l'autre mutation (dans ce cas, 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
Nous pouvons utiliser les Application Passwords de WordPress pour envoyer une requête authentifiée à l'endpoint GraphQL.
Par exemple, nous pouvons passer le mot de passe d'application lors de l'exécution de la commande curl contre le serveur GraphQL, en remplaçant les valeurs USERNAME et PASSWORD :
curl -i \
--user "USERNAME:PASSWORD" \
-X POST \
-H "Content-Type: application/json" \
-d '{"query": "{ me { name } }"}' \
https://mysite.com/graphqlNous pouvons utiliser Gato GraphQL pour exécuter des requêtes HTTP authentifiées contre un autre site WordPress.
La requête ci-dessous reçoit le nom d'utilisateur et le mot de passe d'application (ainsi que l'endpoint auquel se connecter), crée l'en-tête d'authentification requis, et exécute une requête contre le serveur GraphQL externe :
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
}
]
}
})
}