首页 > 解决方案 > 函数符号(json,未知)不存在

问题描述

我正在关注https://postgrest.org/en/v5.0/auth.html#jwt-from-sql上的教程

我创建了这个函数:

create or replace function
login(email text, pass text) returns basic_auth.jwt_token
  language plpgsql
  as $$
declare
  _role name;
  result basic_auth.jwt_token;
begin
  -- check email and password
  select basic_auth.user_role(email, pass) into _role;
  if _role is null then
    raise invalid_password using message = 'invalid user or password';
  end if;

  select sign(
      row_to_json(r), 'reallyreallyreallyreallyverysafe'
    ) as token
    from (
      select _role as role, login.email as email,
         extract(epoch from now())::integer + 60*60 as exp
    ) r
    into result;
  return result;
end;
$$;

当我尝试执行登录请求时,我收到以下错误消息:

{ "hint": "没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。", "details": null, "code": "42883", "message": "function public.sign (json,未知)不存在”}

我在教程中的任何地方都没有看到符号功能,有人知道这里发生了什么吗?

标签: jwtpostgrest

解决方案


安装pgjwt时会创建 sign 函数。

此外,请确保将扩展安装在包含在您的search_path(导入的模式列表)中的模式上。这可以通过做来指定CREATE EXTENSION pgjwt WITH SCHEMA public

PostgRESTpublic默认在 上添加模式search_path,因此扩展应该在没有额外配置的情况下工作。


推荐阅读