---
title: "Supabase-kobling"
description: "Fullstendig Supabase-integrasjonsveiledning for synkronisering av databaseposter, brukerautentisering, fillagring og sanntidshendelser med engasjementsplattformen din."
url: https://tajo.io/no/docs/connectors/custom/supabase/
markdown: https://tajo.io/no/docs/connectors/custom/supabase.md
lang: no-NO
robots: noindex
---

Be om tidlig tilgang

Skriv inn fornavn og e-postadresse på jobb. Vi sender deg en lenke for å bekrefte forespørselen om tilgang til Tajo.

# Supabase-kobling

Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.

| Kildefelt | Målfelt | Eksempelverdi |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Koble Supabase-prosjektet ditt for å synkronisere databaseposter, brukerautentiseringsdata, fillagringshendelser og sanntidsendringer for automatisering av kundeengasjement.

## Oversikt

| Egenskap | Verdi |
| --- | --- |
| **Plattform** | Supabase |
| **Kategori** | Database og backend |
| **Oppsettskompleksitet** | Enkel |
| **Offisiell integrasjon** | Nei |
| **Synkroniserte data** | Brukere, tabeller, lagring, hendelser |
| **Tilgjengelige ferdigheter** | 11 |
| **API-type** | REST (PostgREST) + Realtime WebSocket |
| **Offisiell dokumentasjon** | [supabase.com/docs](https://supabase.com/docs) |

## Funksjoner

- **Autogenerert REST API**, CRUD-operasjoner på enhver Postgres-tabell via PostgREST, ingen kode kreves
- **Synkronisering av Auth-brukere**, Synkroniser Supabase Auth-brukere (e-post, telefon, sosial innlogging) til engasjementsplattformen din
- **Sanntidsabonnementer**, Lytt på INSERT-, UPDATE- og DELETE-hendelser på enhver tabell i sanntid
- **Row Level Security**, All API-tilgang respekterer Postgres RLS-policyer for sikre data med flere tenanter
- **Lagringsintegrasjon**, Spor filopplastinger og administrer ressurser på tvers av Storage-bøtter
- **Edge Functions**, Kall serverløse Deno-funksjoner for egendefinert logikk og webhooks
- **Fulltekstsøk**, Utnytt Postgres’ fulltekstsøkfunksjoner gjennom API-et

## Forutsetninger

Før du begynner, sørg for at du har:

1. Et Supabase-prosjekt ([app.supabase.com](https://app.supabase.com/))
2. Prosjektets **API URL** og **API-nøkler** (finnes i Settings → API)
3. En Tajo-konto med API-tilgang

API-nøkler

Supabase tilbyr to nøkler: `anon` (offentlig, respekterer RLS) og `service_role` (omgår RLS, administratortilgang). Bruk `service_role` for tjensersideintegrasjoner og `anon` for klientside.

## Autentisering

Supabase bruker API-nøkkelautentisering. Hver forespørsel krever `apikey`-headeren og valgfritt et `Authorization`-bearer-token for brukeravgrenset tilgang.

```bash
# Bruk av anon-nøkkel (respekterer RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
  -H "apikey: <SUPABASE_ANON_KEY>" \
  -H "Authorization: Bearer <SUPABASE_ANON_KEY>"

# Bruk av service_role-nøkkel (omgår RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
  -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \
  -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"
```

## Konfigurasjon

### Grunnleggende oppsett

```yaml
connectors:
  supabase:
    enabled: true
    project_url: "https://xyzcompany.supabase.co"
    api_key: "${SUPABASE_SERVICE_ROLE_KEY}"

    # Synkroniseringsalternativer
    sync:
      users: true
      tables:
        - customers
        - orders
        - products
      storage: true
      realtime: true

    # Mapp Supabase Auth-brukere til kontakter
    user_mapping:
      email: email
      phone: SMS
      user_metadata.full_name: FIRSTNAME
      created_at: SIGNUP_DATE
```

### Feltmapping

Mapp Supabase-tabellkolonner til engasjementsplattformattributter:

#### Standard brukermappinger

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | Brukerens e-post fra Supabase Auth (unik identifikator) |
| `phone` optional | string | Telefonnummer for SMS/WhatsApp-engasjement |
| `user_metadata.full_name` optional | string | Visningsnavn fra Auth-brukermetadata |
| `user_metadata.avatar_url` optional | string | Profilbilde-URL |
| `created_at` optional | timestamp | Tidsstempel for kontooppretting |
| `last_sign_in_at` optional | timestamp | Siste innlogging for engasjementsscoring |
| `app_metadata.provider` optional | string | Auth-leverandør (email, google, github osv.) |
| `confirmed_at` optional | timestamp | Tidsstempel for e-postbekreftelse |

#### Egendefinert tabellmapping

```yaml
table_mapping:
  customers:
    # Kolonne → attributt-mapping
    email: email
    full_name: FIRSTNAME
    company: COMPANY
    plan: SUBSCRIPTION_PLAN
    mrr: MONTHLY_REVENUE
    created_at: SIGNUP_DATE

  orders:
    # Spor som hendelser
    sync_as: events
    event_name: "order_placed"
    properties:
      total: amount
      status: order_status
      items: line_items
```

## API-endepunkter

Supabases REST API genereres automatisk fra databaseskjemaet ditt på `https://<ref>.supabase.co/rest/v1/`.

| Endepunkt | Metode | Beskrivelse |
| --- | --- | --- |
| `/rest/v1/{table}` | `GET` | Spør rader med filtrering, sortering, paginering |
| `/rest/v1/{table}` | `POST` | Sett inn rader (støtter bulk og upsert) |
| `/rest/v1/{table}` | `PATCH` | Oppdater rader som matcher filtre |
| `/rest/v1/{table}` | `DELETE` | Slett rader som matcher filtre |
| `/rest/v1/rpc/{function}` | `POST` | Kall en Postgres-funksjon |
| `/auth/v1/signup` | `POST` | Opprett en ny bruker |
| `/auth/v1/token?grant_type=password` | `POST` | Logg inn med passord |
| `/auth/v1/user` | `GET` | Hent gjeldende bruker |
| `/auth/v1/admin/users` | `GET` | List alle brukere (service\_role) |
| `/storage/v1/object/{bucket}/{path}` | `POST` | Last opp fil |
| `/storage/v1/object/list/{bucket}` | `POST` | List filer i bøtte |
| `/functions/v1/{function_name}` | `POST` | Kall Edge Function |

### Filteroperatorer

| Operator | Beskrivelse | Eksempel |
| --- | --- | --- |
| `eq` | Lik | `?status=eq.active` |
| `neq` | Ikke lik | `?status=neq.deleted` |
| `gt`, `gte` | Større enn | `?amount=gt.100` |
| `lt`, `lte` | Mindre enn | `?created_at=lt.2024-01-01` |
| `like`, `ilike` | Mønstertreff | `?name=ilike.%john%` |
| `in` | I array | `?status=in.(active,trial)` |
| `is` | Null-sjekk | `?deleted_at=is.null` |

## Hendelser

### Auth-hendelser

| Hendelse | Utløser | Bruksområde |
| --- | --- | --- |
| `user.signed_up` | Ny brukerregistrering | Velkomstserie |
| `user.signed_in` | Brukerinnlogging | Aktivitetssporing |
| `user.updated` | Profilendringer | Datasynkronisering |
| `user.deleted` | Kontosletting | Opprydningsarbeidsflyter |

### Databasehendelser (Realtime)

| Hendelse | Utløser | Bruksområde |
| --- | --- | --- |
| `INSERT` | Ny rad lagt til | Varsler om ny ordre/kunde |
| `UPDATE` | Rad endret | Arbeidsflyter for statusendring |
| `DELETE` | Rad fjernet | Churn-deteksjon |

### Webhook-hendelser

| Hendelse | Utløser | Bruksområde |
| --- | --- | --- |
| `auth.user.created` | Brukerregistrering via webhook | Utløs onboarding |
| `storage.object.created` | Fil opplastet | Ressursbehandling |

## Kodeeksempler

### Initialiser kobling

```javascript
import { TajoClient } from '@tajo/sdk';
import { createClient } from '@supabase/supabase-js';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
});

// Koble til Supabase-prosjekt
await tajo.connectors.connect('supabase', {
  projectUrl: process.env.SUPABASE_URL,
  serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,
});
```

### Synkroniser brukere til kontakter

```javascript
// Synkroniser alle Supabase Auth-brukere som kontakter
await tajo.connectors.sync('supabase', {
  type: 'full',
  resources: ['users'],
});

// Inkrementell synkronisering (kun nye/endrede brukere)
await tajo.connectors.sync('supabase', {
  type: 'incremental',
  resources: ['users'],
  since: '2024-01-01T00:00:00Z',
});
```

### Lytt til sanntidsendringer

```javascript
// Abonner på nye bestillinger for engasjementsutløsere
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_ROLE_KEY
);

supabase
  .channel('orders')
  .on('postgres_changes',
    { event: 'INSERT', schema: 'public', table: 'orders' },
    async (payload) => {
      // Videresend til Tajo som en hendelse
      await tajo.events.track({
        email: payload.new.customer_email,
        event: 'order_placed',
        properties: {
          order_id: payload.new.id,
          total: payload.new.total,
          items: payload.new.line_items,
        },
      });
    }
  )
  .subscribe();
```

### Spør og segmenter

```javascript
// Spør kunder etter plan for målrettede kampanjer
const { data: proUsers } = await supabase
  .from('customers')
  .select('email, full_name, plan, mrr')
  .eq('plan', 'pro')
  .gt('mrr', 100)
  .order('mrr', { ascending: false });

// Synkroniser til en Brevo-liste for kampanjemålretting
await tajo.lists.addContacts(PRO_LIST_ID, proUsers);
```

## Ratebegrensninger

API-ratebegrensninger

Supabases ratebegrensninger avhenger av planen din. Free-nivå: 500 forespørsler/minutt. Pro: 1 000 forespørsler/sekund. Kontakt Supabase for Enterprise-grenser.

| Plan | Ratebegrensning | Realtime-tilkoblinger |
| --- | --- | --- |
| Free | 500 forespørsler/min | 200 samtidige |
| Pro | 1 000 forespørsler/s | 500 samtidige |
| Team | 2 000 forespørsler/s | 1 000 samtidige |
| Enterprise | Tilpasset | Tilpasset |

## Feilsøking

### Vanlige problemer

| Problem | Årsak | Løsning |
| --- | --- | --- |
| 401 Unauthorized | Ugyldig eller utløpt API-nøkkel | Sjekk API-nøkler i Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS-policy blokkerer tilgang | Bruk `service_role`-nøkkel for administratoroperasjoner, eller sjekk RLS-policyer |
| Ingen sanntidshendelser | Realtime ikke aktivert for tabell | Aktiver i Database → Replication → legg tabell til i publisering |
| Tomme spørringsresultater | RLS filtrerer alle rader | Verifiser at RLS-policyer tillater den autentiserte rollen å lese |
| Lagringsopplasting mislykkes | Bøttepolicyer | Sjekk at Storage-bøtta er satt til offentlig eller har riktige RLS-policyer |

### Feilsøkingsmodus

```yaml
connectors:
  supabase:
    debug: true
    log_level: verbose
    log_queries: true
    log_realtime: true
```

### Test tilkobling

```bash
tajo connectors test supabase
# ✓ API-tilkobling vellykket
# ✓ Auth-endepunkt tilgjengelig
# ✓ Tabeller lesbare (12 tabeller funnet)
# ✓ Lagring tilgjengelig (3 bøtter)
# ✓ Realtime-tilkobling etablert
# ✓ Edge Functions tilgjengelig (4 funksjoner)
```

## Beste praksis

1. **Bruk service\_role-nøkkel kun på tjenersiden**, Eksponer den aldri i klientkode
2. **Aktiver RLS på alle tabeller**, Selv med service\_role, design med RLS for dybdeforsvar
3. **Bruk Realtime for hendelsesdrevet synkronisering**, Mer effektivt enn polling for endringer
4. **Batch-operasjoner**, Bruk bulk-innsettinger og `in`-filter for operasjoner med stort volum
5. **Mapp brukermetadata**, Lagre engasjementsrelevante felt i `user_metadata` ved registrering
6. **Bruk Edge Functions for webhooks**, Behandle innkommende webhooks med Supabase Edge Functions for lav-latens-håndtering

## Sikkerhet

- **API-nøkkelautentisering**, Alle forespørsler krever gyldige API-nøkler
- **Row Level Security (RLS)**, Postgres-nativ tilgangskontroll per rad
- **JWT-verifisering**, Auth-tokens er signerte JWT-er verifisert på hver forespørsel
- **SSL/TLS**, Alle tilkoblinger er kryptert under transport
- **SOC 2 Type II**, Supabase er SOC 2-kompatibel
- **Nettverksrestriksjoner**, Valgfri IP-hviteliste på betalte planer

## Relaterte ressurser

- [Shopify-kobling](https://tajo.io/no/docs/connectors/ecommerce/shopify)
- [Stripe-kobling](https://tajo.io/no/docs/connectors/ecommerce/stripe)
- [Auth0-kobling](https://tajo.io/no/docs/connectors/custom/auth0)
- [Supabases offisielle dokumentasjon](https://supabase.com/docs)
- [Supabase REST API-veiledning](https://supabase.com/docs/guides/api)
- [Supabase Auth-veiledning](https://supabase.com/docs/guides/auth)
