Interagire con l'API GraphQL
Interagire con l'API GraphQLAutenticazione utente

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.

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.

Client GraphiQL all'interno del wp-admin
Client GraphiQL all'interno del wp-admin

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

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