Interagir avec l'API GraphQL
Interagir avec l'API GraphQLAuthentification utilisateur

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é.

Client GraphiQL dans le wp-admin
Client GraphiQL dans le wp-admin

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/graphql

Nous 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
        }
      ]
    }
  })
}