Kullanıcı kimlik doğrulama
Çalıştırılacak GraphQL sorgusu, kullanıcının oturum açmış olmasını gerektirebilir; örneğin bir gönderi oluşturmak için mutation çalıştırmak gibi durumlarda.
Kullanıcıyı kimlik doğrulamanın birkaç yolu vardır.
WordPress'te zaten kimliği doğrulanmış oturumdan çerezleri kullanma
WordPress çerez tabanlı kullanıcı kimlik doğrulaması kullandığından, WordPress sitesine giriş yaptığımızda GraphiQL istemcisini açıp oradan GraphQL queries çalıştırabiliriz.
GraphQL isteğine gönderilen çerezler WordPress sitesindekilerle aynı olduğundan, kullanıcı zaten oturum açmış olacaktır.

loginUser mutation
Gerekli mutation'ı çalıştırmak için aynı GraphQL sorgusunda, kullanıcıyı kimlik doğrulamak amacıyla loginUser mutation'ını kullanabiliriz.
Sıranın önemli olduğuna dikkat edin: loginUser, diğer mutation'dan önce eklenmelidir (bu durumda 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
GraphQL endpoint'ine kimliği doğrulanmış bir istek göndermek için WordPress Application Passwords özelliğini kullanabiliriz.
Örneğin, USERNAME ve PASSWORD değerlerini değiştirerek GraphQL sunucusuna karşı curl komutunu çalıştırırken uygulama parolasını geçirebiliriz:
curl -i \
--user "USERNAME:PASSWORD" \
-X POST \
-H "Content-Type: application/json" \
-d '{"query": "{ me { name } }"}' \
https://mysite.com/graphqlBaşka bir WordPress sitesine karşı kimliği doğrulanmış HTTP istekleri çalıştırmak için Gato GraphQL kullanabiliriz.
Aşağıdaki sorgu, kullanıcı adını ve uygulama parolasını (ve bağlanılacak endpoint'i) alır, gerekli kimlik doğrulama başlığını oluşturur ve harici GraphQL sunucusuna karşı bir sorgu çalıştırır:
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
}
]
}
})
}