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.

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