Interactie met de GraphQL API
Interactie met de GraphQL APIGebruikersauthenticatie

Gebruikersauthenticatie

De uit te voeren GraphQL-query kan vereisen dat de gebruiker is ingelogd — bijvoorbeeld om een mutatie uit te voeren die een post aanmaakt.

Er zijn verschillende manieren om de gebruiker te authenticeren.

Cookies gebruiken van een al geauthenticeerde sessie in WordPress

Omdat WordPress gebruikmaakt van cookie-gebaseerde gebruikersauthenticatie, kunnen we wanneer we ingelogd zijn op de WordPress-site eenvoudigweg de GraphiQL-client openen en er GraphQL-queries vanuit uitvoeren.

Omdat de cookies die naar het GraphQL-verzoek worden gestuurd dezelfde zijn als die van de WordPress-site, is de gebruiker al ingelogd.

GraphiQL-client binnen wp-admin
GraphiQL-client binnen wp-admin

loginUser-mutatie

In dezelfde GraphQL-query die de vereiste mutatie uitvoert, kunnen we de loginUser-mutatie gebruiken om de gebruiker te authenticeren.

Let op dat de volgorde belangrijk is: loginUser moet vóór de andere mutatie worden toegevoegd (in dit geval 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

We kunnen WordPress Application Passwords gebruiken om een geauthenticeerd verzoek naar het GraphQL-eindpunt te sturen.

We kunnen het applicatiewachtwoord bijvoorbeeld meegeven bij het uitvoeren van de curl-opdracht tegen de GraphQL-server, waarbij we de waarden USERNAME en PASSWORD vervangen:

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

We kunnen Gato GraphQL gebruiken om geauthenticeerde HTTP-verzoeken uit te voeren naar een andere WordPress-site.

De onderstaande query ontvangt de gebruikersnaam en het applicatiewachtwoord (en het eindpunt waarmee verbinding wordt gemaakt), maakt de vereiste authenticatieheader aan en voert een query uit tegen de externe GraphQL-server:

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