Benutzerauthentifizierung
Die auszuführende GraphQL-Query kann erfordern, dass der Benutzer angemeldet ist – zum Beispiel um eine Mutation auszuführen, die einen Beitrag erstellt.
Es gibt verschiedene Möglichkeiten, den Benutzer zu authentifizieren.
Cookies einer bereits authentifizierten WordPress-Sitzung verwenden
Da WordPress eine Cookie-basierte Benutzerauthentifizierung verwendet, können wir, sobald wir auf der WordPress-Website angemeldet sind, einfach den GraphiQL-Client öffnen und GraphQL-Queries von dort aus ausführen.
Da die an die GraphQL-Anfrage gesendeten Cookies dieselben wie die der WordPress-Website sind, ist der Benutzer bereits angemeldet.

loginUser-Mutation
In derselben GraphQL-Query zur Ausführung der gewünschten Mutation können wir die loginUser-Mutation verwenden, um den Benutzer zu authentifizieren.
Bitte beachte, dass die Reihenfolge wichtig ist: loginUser muss vor der anderen Mutation (in diesem Fall createPost) eingefügt werden:
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
Wir können WordPress Application Passwords verwenden, um eine authentifizierte Anfrage an den GraphQL-Endpoint zu senden.
Zum Beispiel können wir das Application Password beim Ausführen des curl-Befehls gegen den GraphQL-Server übergeben und dabei die Werte USERNAME und PASSWORD ersetzen:
curl -i \
--user "USERNAME:PASSWORD" \
-X POST \
-H "Content-Type: application/json" \
-d '{"query": "{ me { name } }"}' \
https://mysite.com/graphqlWir können Gato GraphQL verwenden, um authentifizierte HTTP-Anfragen gegen eine andere WordPress-Website auszuführen.
Die folgende Query empfängt den Benutzernamen und das Application Password (sowie den Endpoint, zu dem die Verbindung hergestellt werden soll), erstellt den erforderlichen Authentifizierungs-Header und führt eine Query gegen den externen GraphQL-Server aus:
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
}
]
}
})
}