Я хочу аутентифицировать пользователя по его псевдониму (networkId
) и предварительно хешированному паролю, с таблицей publi c (recoyx.user
) и частной таблицей пользователя (recoyx_private.user
). Функция основана на просмотре этого учебника PostGraphile (PostGraphile сочетает в себе GraphQL и PostgreSQL).
create function recoyx.authenticate(
network_id text,
password_hash text
) returns recoyx.jwt_token
begin;
set local id to (select (numeric_id) from recoyx.user where user.network_id = $1).numeric_id;
select (numeric_id, password_hash)::recoyx.jwt_token
from recoyx_private.user
where user.numeric_id = id and user.password_hash = $2;
end;
Средство выполнения запросов дает неверный синтаксис в этой функции в целом, как в части например, select * from recoyx.table where table.field = value
, фреймы транзакций и привязка id
. Я взял обработчик запросов из этого примера , который дает короткое средство для инициализации, запроса и освобождения обработчика запросов для базы данных PostgreSQL (я получил сюда через эту документацию API модуля postgraphile ).
Когда я удаляю эту функцию из своего запроса, она работает нормально. Насколько я только что видел, точка действительна, и локальное назначение тоже. Так что, мой синтаксис действительно неправильный?
Обновление
Теперь это моя функция:
create function recoyx.authenticate(
network_id text,
password_hash text
) returns recoyx.jwt_token
as
$body$
select (numeric_id, password_hash)::recoyx.jwt_token
from recoyx_private.user
where numeric_id = (select numeric_id from recoyx.user where network_id = $1)
and password_hash = $2;
$body$
language sql
stable;
Я получаю неопределенные отношения, но подключаюсь к значениям по умолчанию Роль root, которая входит в мою установку PostgreSQL (postgres
роль), когда я запускаю create function
запрос
Я поместил проект на GitHub . Запускаю запрос через npm run init-database
. См. пример среды. json (он определяет обычную роль «postgres»).