执行经过身份验证的 keystone.js / GraphQL API 查询

Posted

技术标签:

【中文标题】执行经过身份验证的 keystone.js / GraphQL API 查询【英文标题】:Perform an authenticated keystone.js / GraphQL API query 【发布时间】:2020-11-14 13:16:30 【问题描述】:

我是 Keystone.js 和 GraphQL 的新手。到目前为止,我已经能够通过 POST 请求成功执行以下 API 查询(取自 page):

const SIGNIN = `mutation signin($identity: String, $secret: String) 
  authenticate: authenticateUserWithPassword(email: $identity, password: $secret) 
    item 
      id
      name
    
  
`;

// Returns id and name of authenticated user

const GET_ALL_POSTS = `query GetPosts 
  allPosts 
    name
    id
  
`;

// Returns id and name of all posts (if no access controls)

如果我为列表 Post 设置 access controls,我会按预期从第二个查询中收到访问错误,但我无法工作如何对 allPosts 执行经过身份验证的查询,例如我要:

(以编程方式)通过用户的电子邮件和密码对用户进行身份验证 如果成功,运行allPosts 的查询并返回结果

我做错了什么?

【问题讨论】:

【参考方案1】:

答案是首先提交以下查询,以验证您的用户并生成访问令牌:

query: `mutation ($identity: String, $secret: String) 
  authenticate: authenticateUserWithPassword(email: $identity, password: $secret) 
    token
  
`

然后通过将提供的令牌添加到您的请求标头来验证后续查询:

'Authorization: Bearer <token>'.

更多信息here。

更一般地说,the GraphQL playground 非常值得任何进入 keystonejs 和 GraphQL 新手的人看看。

【讨论】:

以上是关于执行经过身份验证的 keystone.js / GraphQL API 查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 axios 执行经过身份验证的请求时,Jest 返回“网络错误”

Spring Security:仅为经过身份验证的用户执行 jQuery 代码

如何检查用户是不是经过身份验证以访问特定路径(MEAN STACK)

如何在 Blazor WASM 中对当前经过身份验证的用户帐户信息执行 CRUD 操作?

使用浏览器中现有的经过身份验证的会话在python上执行https请求

如果经过身份验证的 NodeJS 则重定向