GraphQL API ile Etkileşim
GraphQL API ile EtkileşimKullanıcı kimlik doğrulama

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.

wp-admin içindeki GraphiQL istemcisi
wp-admin içindeki GraphiQL istemcisi

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/graphql

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