GraphQL 突变权限错误:“错误:由于权限错误导致突变失败:”

问题描述 投票:0回答:4

问题

我正在使用 graphql 开发 next.js 应用程序,并且我正在尝试从我的应用程序创建内容。

当我运行突变查询时,我得到这个:

Error: Mutation failed due to permission errors: {"response":{"errors":[{"message":"Mutation failed due to permission errors","extensions":{"code":"403","failedActions":[{"action":"create","model":"NousContacter","stage":"DRAFT"}]}}],"data":null,"extensions":{"requestId":"cl47gsed70qm30bt92jr1df04"},"status":403,"headers":{"map":{"cache-control":"private, no-store","content-type":"application/json"}}},"request":{"query":"\n\tmutation CreateNousContacter($nom: String!, $email: String!, $message: String! ) {\n\t\tcreateNousContacter(data: {nom: $nom, email: $email, message: $message}){id}}","variables":{"nom":"TESTname","email":"TESTmail","message":"TESTmessage"}}}

我的获取查询都可以正常工作,没有任何问题,但这是我编写的第一个突变,我不知道如何让它工作。

我的要求

import { request, gql } from 'graphql-request';
const graphqlAPI = process.env.NEXT_PUBLIC_GRAPHCMS_ENDPOINT;

export const nousContacter = async ({ nom, email, message }) => {
    const query = gql`
        mutation CreateNousContacter($nom: String!, $email: String!, $message: String!){
            createNousContacter(data: {nom: $nom, email: $email, message: $message}) {
              id
            }
          }`;
        await request(graphqlAPI, query, {nom, email, message});
};

在图形方面,我的模型的所有字段都是读/写的

额外问题

1-每当我让我的突变发挥作用时,我如何创建我的内容并将其直接放入发布阶段?我还没能在图形 API 游乐场上做到这一点

2- 我可以在只读字段的情况下做我想做的事情吗?

next.js graphql
4个回答
3
投票

此消息“由于权限错误,突变失败” 这意味着您授予了写入内容的权限,但在写入后,您正在尝试读取返回值,但您尝试读取的返回值很可能会被读取为已发布。

再次授予您的模型以草稿形式读取的权限


1
投票

您必须授予您的特定令牌的所有权限:

设置 -> 永久身份验证令牌 -> 编辑令牌并授予其所有权限。


0
投票

您需要从 graphcms 生成一个永久令牌,将其添加到 .env 并在标头中调用它,如下所示:

import { GraphQLClient, gql } from 'graphql-request';
const graphqlAPI = process.env.NEXT_PUBLIC_GRAPHCMS_ENDPOINT;
const graphcmsToken = process.env.GRAPHCMS_TOKEN

export const nousContacter = async ({ nom, email, message }) => {

  const graphQLClient = new GraphQLClient(graphqlAPI, {
    headers: {
      authorization: `Bearer ${graphcmsToken}`
    }
  })

    const query = gql`
        mutation CreateNousContacter($nom: String!, $email: String!, $message: String!){
            createNousContacter(data: {nom: $nom, email: $email, message: $message}) {
              id
            }
          }`;
        await GraphQLClient.request(query, {nom, email, message});
};

0
投票

我想你正在使用

GraphCMS
,现在称为
hygraph

正如其他答案提到的,为了避免错误,您必须拥有永久身份验证令牌并授予其权限。

我只想回答额外的问题:
不可以,您不能创建内容并直接将其放入

PUBLISHED
阶段。
所有
create*
突变只能在
DRAFT
阶段创建内容。您只能在
DRAFT
阶段创建内容后才能发布内容。
发布突变由
Hygraph
自动生成(更多详细信息 https://hygraph.com/docs/api-reference/content-api/mutations#publishing-content-mutations)。

以下为发布突变

import { request, gql } from 'graphql-request';
const graphqlAPI = process.env.NEXT_PUBLIC_GRAPHCMS_ENDPOINT;

export const nousContacter = async (id) => {
    const query = gql`
      mutation PublishNousContacter($id: ID!) {
        PublishNousContacter(where: { id: $id }, to: PUBLISHED) {
          id
        }
      }`;
    await request(graphqlAPI, query, { id });
};       

注意:对于嵌套对象,您必须单独或批量请求发布所有嵌套对象。

© www.soinside.com 2019 - 2024. All rights reserved.