Как передать заголовок в хасура-сессии?
Я запускаю проект Hasura и использую поле вычислений в Hasura. Как я могу передать и получить заголовок в запросе? Уже существует открытая проблема, но люди также говорят об обходном пути, но у меня это не сработало.
Вот заголовок:x-hasura-preferred-lang: de_de
Вот запрос
CREATE OR REPLACE FUNCTION public.interest_translation_function(interest_row interest, hasura_session json)
RETURNS text
LANGUAGE sql
STABLE
AS $function$
SELECT
CASE
WHEN (hasura_session ->> 'x-hasura-preferred-lang' = 'en_us' AND T.en_us IS NOT NULL) THEN T.en_us
WHEN (hasura_session ->> 'x-hasura-preferred-lang' = 'de_de' AND T.de_de IS NOT NULL) THEN T.de_de
ELSE T.source
END
FROM i18n T
WHERE T.source = interest_row.name;
$function$
Как видите, сейчас я использую hasura_session, который мы получим от jwt, но я хочу передать заголовок без jwt. хотя бы по этому поводу
Я ожидаю получить переведенное значение без передачи токена, когда у той же таблицы есть разрешение.
1 ответ
Я не смог найти никакого решения. Кажется, для этого существует открытый вопрос . В итоге я использую следующий подход.
- Вы можете передать код языка в мутации Hasura, не создавая никаких новых действий.
Вы можете обновить SQL поля вычислений, как показано ниже.
CREATE OR REPLACE FUNCTION public.interest_translation_function(interest_row interest, lang_code text)
RETURNS text
LANGUAGE sql
STABLE
AS $function$
SELECT
CASE
WHEN (lang_code = 'en_us' AND T.en_us IS NOT NULL) THEN T.en_us
WHEN (lang_code = 'de_de' AND T.de_de IS NOT NULL) THEN T.de_de
ELSE T.source
END
FROM i18n T
WHERE T.source = interest_row.name;
$function$
- Запрос будет выглядеть примерно так.
query GetInterest {
interest {
name
translated(args: {lang_code: "de_de"})
}
}