Я пытаюсь передать токен JWT своим вложенным запросам в AppSync , чтобы проверить, имеет ли пользователь право запрашивать такие данные.
Проблема в том, что AppSync не позволяет мне пересылать токен JWT из моих родительских запросов в любой дочерний распознаватель .
Пример:
mutation test {
emailSignIn(input: {email: "0@gmail.com", password: "XYZ"}) {
token
currentUser {
id
profilePicture {
uuid
}
... on Client {
lastName
pleadingList{
id
pleadingFiles {
uuid
}
pleadingParticipantSlots {
id
participant {
id
}
}
}
}
}
}
}
Здесь "profilePicture", "pleadingList", "pleadingFiles", "pleadingParticipantSlots", "member" являются подзапросами , и я хочу иметь возможность определить, кто выполняет каждый подзапрос, а не только основной / родительский запрос
Есть ли решение?
Что я уже пробовал:
Проблема в том, что когда я динамически добавляю токен к основному результату, он не всегда работает (в некотором смысле, если то, что я получаю обратно из моего запроса, это массив Item, а подзапрос - запуск для каждый элемент, тогда у меня нет доступа к токену в каждом подзапросе, потому что $ ctx.source будет только элементом без токена.
- Я также пытался с помощью конвейера добавить токен JWT в ctx.stash, но это даже хуже, потому что ctx.stash (и ctx.args) очищаются перед любым подзапросом
Так что мне бы хотелось, чтобы способ передавал переменную всем моим дочерним распознавателям или как сохранить мой заголовок от родительского запроса до вложенного запроса.
Единственный способ заставить его работать (и это очень уродливо, и я не хочу этого делать;)) - каждый раз добавлять во внешний интерфейс токен как параметр запроса и подзапроса ...
нравится:
mutation test {
emailSignIn(input: {email: "0@gmail.com", password: "XYZ"}) {
token
currentUser {
id
profilePicture(token: "blablabla") {
uuid
}
... on Client {
lastName
pleadingList(token: "blablabla") {
id
pleadingFiles(token: "blablabla") {
uuid
}
pleadingParticipantSlots {
id
participant(token: "blablabla") {
id
}
}
}
}
}
}
}
Я немного растерян и не нахожу ничего важного в документах AWS AppSync.
Там в любом случае? Или я ошибаюсь?
Спасибо