Gebruikersauthenticatie
De uit te voeren GraphQL-query kan vereisen dat de gebruiker is ingelogd — bijvoorbeeld om een mutatie uit te voeren die een post aanmaakt.
Er zijn verschillende manieren om de gebruiker te authenticeren.
Cookies gebruiken van een al geauthenticeerde sessie in WordPress
Omdat WordPress gebruikmaakt van cookie-gebaseerde gebruikersauthenticatie, kunnen we wanneer we ingelogd zijn op de WordPress-site eenvoudigweg de GraphiQL-client openen en er GraphQL-queries vanuit uitvoeren.
Omdat de cookies die naar het GraphQL-verzoek worden gestuurd dezelfde zijn als die van de WordPress-site, is de gebruiker al ingelogd.

loginUser-mutatie
In dezelfde GraphQL-query die de vereiste mutatie uitvoert, kunnen we de loginUser-mutatie gebruiken om de gebruiker te authenticeren.
Let op dat de volgorde belangrijk is: loginUser moet vóór de andere mutatie worden toegevoegd (in dit geval 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
We kunnen WordPress Application Passwords gebruiken om een geauthenticeerd verzoek naar het GraphQL-eindpunt te sturen.
We kunnen het applicatiewachtwoord bijvoorbeeld meegeven bij het uitvoeren van de curl-opdracht tegen de GraphQL-server, waarbij we de waarden USERNAME en PASSWORD vervangen:
curl -i \
--user "USERNAME:PASSWORD" \
-X POST \
-H "Content-Type: application/json" \
-d '{"query": "{ me { name } }"}' \
https://mysite.com/graphqlWe kunnen Gato GraphQL gebruiken om geauthenticeerde HTTP-verzoeken uit te voeren naar een andere WordPress-site.
De onderstaande query ontvangt de gebruikersnaam en het applicatiewachtwoord (en het eindpunt waarmee verbinding wordt gemaakt), maakt de vereiste authenticatieheader aan en voert een query uit tegen de externe GraphQL-server:
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
}
]
}
})
}