与 GraphQL API 交互用户身份验证
用户身份验证
执行的 GraphQL 查询可能要求用户已登录,例如执行创建文章的 mutation。
有几种方法可以对用户进行身份验证。
使用 WordPress 已认证会话中的 Cookie
由于 WordPress 使用基于 Cookie 的用户身份验证,当我们已登录到 WordPress 站点时,只需打开 GraphiQL 客户端并从中执行 GraphQL 查询即可。
发送到 GraphQL 请求的 Cookie 与 WordPress 站点的 Cookie 相同,因此用户将已处于登录状态。

loginUser mutation
在执行所需 mutation 的同一 GraphQL 查询中,我们可以使用 loginUser mutation 来对用户进行身份验证。
请注意顺序很重要:loginUser 必须添加在其他 mutation(在本例中为 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
我们可以使用 WordPress Application Passwords 向 GraphQL 端点发送已认证的请求。
例如,在针对 GraphQL 服务器执行 curl 命令时,我们可以传入应用程序密码,替换 USERNAME 和 PASSWORD 的值:
curl -i \
--user "USERNAME:PASSWORD" \
-X POST \
-H "Content-Type: application/json" \
-d '{"query": "{ me { name } }"}' \
https://mysite.com/graphql我们可以使用 Gato GraphQL 针对另一个 WordPress 站点执行已认证的 HTTP 请求。
以下查询接收用户名和应用程序密码(以及要连接的端点),创建所需的身份验证标头,并针对外部 GraphQL 服务器执行查询:
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
}
]
}
})
}Prev
Next