Не авторизован для доступа к идентификатору типа IFreightDriver

#aws-amplify #aws-appsync #aws-amplify-cli

#aws-amplify #aws-appsync #aws-amplify-cli

Вопрос:

Я определил пользовательский запрос с его пользовательским ответом, вот так:

 input ILocations {
  id: String
  address: String
  latitude: String
  longitude: String
  city: String
  state: String
}

type IBox {
  id: ID
  type: String
  depth: Float
  height: Float
  width: Float
}

type ITruck {
  id: ID
  basePrice: Float
  brand: String
  model: String
  yearModel: Int
  axes: Int
  hasGPS: Boolean
  tons: Float
  utilityPercentage: Float
  fuelEfficiency: Float
  fuelType: FuelType
  frontPhoto: String
  sidePhoto: String
  backPhoto: String
  measuresPhoto: String
  truckBoxId: ID
  truckFreightDriverId: ID
  box: IBox
}

type IFreightDriver {
  id: ID
  state: String
  city: String
  truck: ITruck
}

type Query {
  quotations(
    origin: ILocations
    destination: ILocations
    boxType: String
    boxSize: Float
    truckTons: Float
  ): [IFreightDriver]
    @function(name: "quotations-${env}")
    @auth(rules: [{ allow: public, provider: iam }])
}
  

Если я выполню этот запрос на панели управления AppSync:

 query {
  quotations (
    origin: {
        address: "sdas"
        latitude: "sdas"
        longitude: "dsa"
        city: "Guadalajara",
        state: "Jalisco"
    },
    destination: {
      address: "sdas"
      latitude: "sdas"
      longitude: "dsa"
      city: "Zapopan",
      state: "Jalisco"
    },
    boxType: "Seca (cerrada)",
    boxSize: 64,
    truckTons: 12
  ) {
    id
  }
}
  

Я получаю эту ошибку о разрешениях:

 {
  "data": {
    "quotations": [
      {
        "id": null
      }
    ]
  },
  "errors": [
    {
      "path": [
        "quotations",
        0,
        "id"
      ],
      "data": null,
      "errorType": "Unauthorized",
      "errorInfo": null,
      "locations": [
        {
          "line": 20,
          "column": 5,
          "sourceName": null
        }
      ],
      "message": "Not Authorized to access id on type IFreightDriver"
    }
  ]
}
  

Но, если я приведу ответ из лямбда-выражения в строку и изменю запрос, чтобы получить строку, подобную этой:

   quotations(
    origin: ILocations
    destination: ILocations
    boxType: String
    boxSize: Float
    truckTons: Float
  ): String
    @function(name: "quotations-${env}")
    @auth(rules: [{ allow: public, provider: iam }])
  

I receive the response correctly…

 {
  "data": {
    "quotations": "[{"id":"19847d0c-185c-48f6-9e5c-435e3907133a","state":"Jalisco","city":"Zapopan","truck":{"__typename":"Truck","model":"1234","tons":12,"yearModel":2020,"measuresPhoto":"freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/qzo1x9g7kvb51.jpg","truckFreightDriverId":"19847d0c-185c-48f6-9e5c-435e3907133a","createdAt":"2020-08-13T21:02:36.305Z","brand":"chevrolet","fuelEfficiency":12,"truckBoxId":"b3d9000f-0464-4c3d-b436-f380b19d6fd5","backPhoto":"freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/QCzn1_mWetzZjAFavJYSaug4F2IMAeOAzJa7T6rhC5Q.jpg","frontPhoto":"freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/dlb0275xqna51.png","utilityPercentage":12,"updatedAt":"2020-08-13T21:02:36.305Z","sidePhoto":"freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/ebcpyk19csa51.jpg","fuelType":"premium","hasGPS":true,"id":"b7ec3b05-78c6-4ed9-823d-172a1e9991e5","axes":12,"box":{"__typename":"Box","width":4,"height":4,"updatedAt":"2020-08-13T21:02:35.840Z","depth":4,"createdAt":"2020-08-13T21:02:35.840Z","id":"b3d9000f-0464-4c3d-b436-f380b19d6fd5","type":"Seca (cerrada)"}},"basePrice":null}]"
  }
}
  

Why is asking for these permissions? If someone needs the response I’m receiving:

 [
    {
        "id": "19847d0c-185c-48f6-9e5c-435e3907133a",
        "state": "Jalisco",
        "city": "Zapopan",
        "truck": {
            "__typename": "Truck",
            "model": "1234",
            "tons": 12,
            "yearModel": 2020,
            "measuresPhoto": "freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/qzo1x9g7kvb51.jpg",
            "truckFreightDriverId": "19847d0c-185c-48f6-9e5c-435e3907133a",
            "createdAt": "2020-08-13T21:02:36.305Z",
            "brand": "chevrolet",
            "fuelEfficiency": 12,
            "truckBoxId": "b3d9000f-0464-4c3d-b436-f380b19d6fd5",
            "backPhoto": "freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/QCzn1_mWetzZjAFavJYSaug4F2IMAeOAzJa7T6rhC5Q.jpg",
            "frontPhoto": "freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/dlb0275xqna51.png",
            "utilityPercentage": 12,
            "updatedAt": "2020-08-13T21:02:36.305Z",
            "sidePhoto": "freight-driver/19847d0c-185c-48f6-9e5c-435e3907133a/trucks/ebcpyk19csa51.jpg",
            "fuelType": "premium",
            "hasGPS": true,
            "id": "b7ec3b05-78c6-4ed9-823d-172a1e9991e5",
            "axes": 12,
            "box": {
                "__typename": "Box",
                "width": 4,
                "height": 4,
                "updatedAt": "2020-08-13T21:02:35.840Z",
                "depth": 4,
                "createdAt": "2020-08-13T21:02:35.840Z",
                "id": "b3d9000f-0464-4c3d-b436-f380b19d6fd5",
                "type": "Seca (cerrada)"
            }
        },
        "basePrice": null
    }
]
  

ОБНОВЛЕНИЕ: Также я попытался изменить ответ lambda, чтобы просто возвращать массив идентификаторов, что-то вроде этого:

ответ от lambda: [ { id: '19847d0c-185c-48f6-9e5c-435e3907133a' } ]

ошибка AppSync:

 {
  "data": {
    "quotations": [
      {
        "id": null
      }
    ]
  },
  "errors": [
    {
      "path": [
        "quotations",
        0,
        "id"
      ],
      "data": null,
      "errorType": "Unauthorized",
      "errorInfo": null,
      "locations": [
        {
          "line": 20,
          "column": 5,
          "sourceName": null
        }
      ],
      "message": "Not Authorized to access id on type IFreightDriver"
    }
  ]
}
  

schema.graphql:

 type IFreightDriver {
  id: ID
}

type Query {
  quotations(
    origin: ILocations
    destination: ILocations
    boxType: String
    boxSize: Float
    truckTons: Float
  ): [IFreightDriver]
    @function(name: "quotations-${env}")
    @auth(rules: [{ allow: public, provider: iam }])
}
  

Ответ №1:

Вы должны предоставить разрешение на доступ IFreightDriver . Поскольку вы настраиваете auth для запроса, но не для объекта, к которому он обращается / возвращает (что в вашем случае является IFreightDriver ), следовательно, он выдает вам ошибку разрешения. Однако, когда вы переключаете свой запрос на возврат только строки, вам не нужно устанавливать какие-либо разрешения для этого, и именно поэтому вы не видите никакой ошибки. То же самое происходит, когда вы возвращаете только id of IFreightDriver . Это не позволит вам получить доступ к идентификаторам, если вы не установите разрешение на IFreightDriver .

Комментарии:

1. Да! Я не знал, что просто добавляю @aws_iam к типам… И это все! Да благословит вас Бог!

2. Рад вам помочь! 🙂 Да благословит вас Господь!