Interakcja z API GraphQL
Interakcja z API GraphQLUwierzytelnianie użytkownika

Uwierzytelnianie użytkownika

Wykonywana query GraphQL może wymagać, aby użytkownik był zalogowany — na przykład w celu wykonania mutacji tworzącej post.

Istnieje kilka sposobów uwierzytelnienia użytkownika.

Używanie cookies z już uwierzytelnionej sesji w WordPress

Ponieważ WordPress używa uwierzytelniania użytkownika opartego na cookies, gdy jesteśmy zalogowani w witrynie WordPress, możemy po prostu otworzyć klienta GraphiQL i wykonywać z niego queries GraphQL.

Ponieważ cookies wysyłane do żądania GraphQL są takie same jak te z witryny WordPress, użytkownik będzie już zalogowany.

Klient GraphiQL wewnątrz wp-admin
Klient GraphiQL wewnątrz wp-admin

Mutacja loginUser

W tej samej query GraphQL, która wykonuje wymaganą mutację, możemy użyć mutacji loginUser w celu uwierzytelnienia użytkownika.

Zwróć uwagę, że kolejność ma znaczenie: loginUser musi być dodany przed pozostałymi mutacjami (w tym przypadku 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

Możemy używać Application Passwords WordPress do wysyłania uwierzytelnionych żądań do endpointu GraphQL.

Na przykład możemy przekazać hasło aplikacji podczas wykonywania polecenia curl na serwerze GraphQL, zastępując wartości USERNAME i PASSWORD:

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

Możemy użyć Gato GraphQL do wykonywania uwierzytelnionych żądań HTTP na innej witrynie WordPress.

Poniższa query przyjmuje nazwę użytkownika i hasło aplikacji (oraz endpoint, z którym się łączy), tworzy wymagany nagłówek uwierzytelniający i wykonuje query na zewnętrznym serwerze GraphQL:

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