Supabase: Получение «Роль» пользователя »не существует» ошибки только при аутентификации пользователя запросов продуктовJavascript

Форум по Javascript
Ответить
Anonymous
 Supabase: Получение «Роль» пользователя »не существует» ошибки только при аутентификации пользователя запросов продуктов

Сообщение Anonymous »

Supabase: Getting "role 'user' does not exist" error only when authenticated user queries product/category tables
Problem Summary
I'm experiencing a strange issue with Supabase where:
  • When user is logged out (anonymous): GET requests to /rest/v1/product и/rest/v1/category return 200 ok
  • Когда пользователь регистрируется в (аутентификация): те же запросы возвращают 400 Bad Repress с ошибкой:
" lang-j-hrime "

Код: Выделить всё

{
"code": "22023",
"details": null,
"hint": null,
"message": "role \"user\" does not exist"
}
< /code>
 схема базы данных < /h2>
У меня есть следующие таблицы в моем проекте Supabase: < /p>
-- profiles table (contains user role info)
CREATE TABLE public.profiles (
id UUID REFERENCES auth.users(id) PRIMARY KEY,
name TEXT,
email TEXT,
role TEXT DEFAULT 'user',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- product table
CREATE TABLE public.product (
id INT4 PRIMARY KEY,
name VARCHAR,
price NUMERIC,
stock INT4,
category INT4,
image_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- category table
CREATE TABLE public.category (
id INT4 PRIMARY KEY,
name VARCHAR,
created_at TIMESTAMPTZ DEFAULT NOW()
);
< /code>
 пользовательский токен доступа к крюку < /h2>
У меня есть пользовательский токен для доступа, который считывает роль пользователя из профилей: < /p>
CREATE OR REPLACE FUNCTION public.custom_access_token_hook(event jsonb)
RETURNS jsonb
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
DECLARE
user_role text;
user_name text;
user_email text;
BEGIN
SELECT role, name, email
INTO user_role, user_name, user_email
FROM public.profiles
WHERE id = (event->>'user_id')::uuid;

IF user_role IS NULL THEN
user_role := 'user';
END IF;

RETURN jsonb_set(
event,
'{claims}',
COALESCE(event->'claims', '{}') || jsonb_build_object(
'role', user_role,
'user_name', COALESCE(user_name, ''),
'user_email', COALESCE(user_email, '')
)
);
END;
$$;
< /code>
 код фронта < /h2>
// This works when user is logged out
const { data, error } = await supabase
.from('product')
.select('*');

// Same code returns error when user is logged in
< /code>
 Что я попробовал < /h2>

[*]  [b] отключен RLS < /strong> на таблицах продукта и категорий: < /p>
ALTER TABLE public.product DISABLE ROW LEVEL SECURITY;
ALTER TABLE public.category DISABLE ROW LEVEL SECURITY;
[*] удалил все политики RLS [/b] из этих таблиц

[*] предоставленные режиссии для Anon и Authenticated Roles:


Дополнительный контекст < /h2>
  • Проект Supabase является относительно новым < /li>
    Ошибка начала появляться после реализации Custom Access Token Hook < /li>
    forgin forgine fundulty. Упоминает роль PostgreSQL «Пользователь», которая предполагает, что она пытается использовать роль приложения в качестве роли базы данных < /li>
    < /ul>
    Вопросы < /h2>

    Почему один и тот же запрос работает для анонимных пользователей, но не выполняет аутентичные пользователи? Интерпретируется как роль базы данных PostgreSQL? @Supabase/Supabase-js
  • База данных: postgresql (Supabase Managed)
Любая помощь будет очень оценена!>

Подробнее здесь: https://stackoverflow.com/questions/797 ... icated-use
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»