Skip to main content
This guide shows how to integrate Hexclave with Supabase row level security (RLS).
This guide only focuses on the RLS/JWT integration and does not sync user data between Supabase and Stack. You should use webhooks to achieve data sync.

Setup

Let’s create a sample table and some RLS policies to demonstrate how to integrate Hexclave with Supabase RLS. You can apply the same logic to your own tables and policies.
1

Setup Supabase

First, let’s create a Supabase project, then go to the SQL Editor and create a new table with some sample data and RLS policies.
Supabase SQL Editor
2

Setup a new Next.js project

Now let’s create a new Next.js project and install Hexclave and Supabase client. (more details on Next.js setup, Hexclave setup, and Supabase setup)
Terminal
Then follow the Hexclave setup prompt. Choose Next.js and Supabase in the setup builder, then copy the generated prompt into your coding agent.Now copy the environment variables from the Supabase dashboard to the .env.local file:
  • NEXT_PUBLIC_SUPABASE_URL
  • NEXT_PUBLIC_SUPABASE_ANON_KEY
  • SUPABASE_JWT_SECRET
Copy environment variables from the Hexclave dashboard to the .env.local file.
  • NEXT_PUBLIC_HEXCLAVE_PROJECT_ID
  • NEXT_PUBLIC_HEXCLAVE_PUBLISHABLE_CLIENT_KEY
  • HEXCLAVE_SECRET_SERVER_KEY
3

Set up Supabase client

Now let’s create a server action that mints a supabase JWT with the Hexclave user ID if the user is authenticated.
/utils/actions.ts
And now create a helper function to create a Supabase client with the JWT signed by the server action
/utils/supabase-client.ts
4

Fetch data from Supabase

Let’s create an example page that fetches data from Supabase and displays it.
/app/page.tsx
Now you should be able to compare the data you can view with an anonymous user, an authenticated user. You can also add your user Id to the row 3 of the Supabase table, and you should be able to see the row if and only if you are signed in with that user.
You can find the full example here on GitHub.