Berinteraksi dengan API GraphQL
Berinteraksi dengan API GraphQLAutentikasi pengguna

Autentikasi pengguna

GraphQL query yang akan dieksekusi mungkin mengharuskan pengguna sudah login, misalnya untuk mengeksekusi mutation guna membuat sebuah post.

Ada beberapa cara untuk mengautentikasi pengguna.

Menggunakan cookies dari sesi yang sudah terautentikasi di WordPress

Karena WordPress menggunakan autentikasi pengguna berbasis cookie, setiap kali kita sudah login ke situs WordPress, kita cukup membuka klien GraphiQL dan mengeksekusi GraphQL queries dari sana.

Karena cookies yang dikirim ke request GraphQL sama dengan cookies dari situs WordPress, pengguna akan sudah dalam keadaan login.

Klien GraphiQL di dalam wp-admin
Klien GraphiQL di dalam wp-admin

Mutation loginUser

Dalam GraphQL query yang sama untuk mengeksekusi mutation yang diperlukan, kita dapat menggunakan mutation loginUser untuk mengautentikasi pengguna.

Perlu diperhatikan bahwa urutan sangat penting: loginUser harus ditambahkan sebelum mutation lainnya (dalam hal ini, 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

Kita dapat menggunakan Application Passwords WordPress untuk mengirim request yang terautentikasi ke endpoint GraphQL.

Misalnya, kita dapat menyertakan application password saat mengeksekusi perintah curl terhadap server GraphQL, dengan mengganti nilai USERNAME dan PASSWORD:

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

Kita dapat menggunakan Gato GraphQL untuk mengeksekusi HTTP request yang terautentikasi terhadap situs WordPress lainnya.

Query di bawah ini menerima username dan application password (serta endpoint yang akan dihubungi), membuat header autentikasi yang diperlukan, dan mengeksekusi query terhadap server GraphQL eksternal:

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