Mit der GraphQL API interagieren
Mit der GraphQL API interagierenBenutzerauthentifizierung

Benutzerauthentifizierung

Die auszuführende GraphQL-Query kann erfordern, dass der Benutzer angemeldet ist – zum Beispiel um eine Mutation auszuführen, die einen Beitrag erstellt.

Es gibt verschiedene Möglichkeiten, den Benutzer zu authentifizieren.

Cookies einer bereits authentifizierten WordPress-Sitzung verwenden

Da WordPress eine Cookie-basierte Benutzerauthentifizierung verwendet, können wir, sobald wir auf der WordPress-Website angemeldet sind, einfach den GraphiQL-Client öffnen und GraphQL-Queries von dort aus ausführen.

Da die an die GraphQL-Anfrage gesendeten Cookies dieselben wie die der WordPress-Website sind, ist der Benutzer bereits angemeldet.

GraphiQL-Client im wp-admin
GraphiQL-Client im wp-admin

loginUser-Mutation

In derselben GraphQL-Query zur Ausführung der gewünschten Mutation können wir die loginUser-Mutation verwenden, um den Benutzer zu authentifizieren.

Bitte beachte, dass die Reihenfolge wichtig ist: loginUser muss vor der anderen Mutation (in diesem Fall createPost) eingefügt werden:

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

Wir können WordPress Application Passwords verwenden, um eine authentifizierte Anfrage an den GraphQL-Endpoint zu senden.

Zum Beispiel können wir das Application Password beim Ausführen des curl-Befehls gegen den GraphQL-Server übergeben und dabei die Werte USERNAME und PASSWORD ersetzen:

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

Wir können Gato GraphQL verwenden, um authentifizierte HTTP-Anfragen gegen eine andere WordPress-Website auszuführen.

Die folgende Query empfängt den Benutzernamen und das Application Password (sowie den Endpoint, zu dem die Verbindung hergestellt werden soll), erstellt den erforderlichen Authentifizierungs-Header und führt eine Query gegen den externen GraphQL-Server aus:

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