#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. Рад вам помочь! 🙂 Да благословит вас Господь!