Πώς να διορθώσετε το σφάλμα «Supabase API Key Not Found» στις μεταβλητές περιβάλλοντος

Τελευταία επαλήθευση: 11 Σεπτεμβρίου 2026. Προσθέτετε το URL και το κλειδί API του Supabase σε ένα αρχείο .env, κάνετε επανεκκίνηση της εφαρμογής και εξακολουθείτε να λαμβάνετε ένα σφάλμα όπως “Supabase API key not found” ή το δικό του Supabase supabaseKey is required. Στις περισσότερες περιπτώσεις, το κλειδί υπάρχει κάπου, αλλά ο κώδικας που καλεί τη συνάρτηση createClient() λαμβάνει undefined ή ένα κενό string.

Υπάρχει επίσης μια σημαντική αλλαγή ονοματολογίας του 2026 πίσω από πολλά συγχυτικά tutorials. Το Supabase καταργεί σταδιακά τα παλιά κλειδιά API anon και service_role έως το τέλος του 2026 και τώρα συνιστά κλειδιά publishable για δημόσιο/πελατειακό κώδικα και κλειδιά secret για έμπιστο κώδικα διακομιστή. Τα υπάρχοντα παλιά κλειδιά μπορούν να συνεχίσουν να λειτουργούν κατά τη διάρκεια της μετανάστευσης μέχρι να τα απενεργοποιήσετε, αλλά το όνομα της μεταβλητής περιβάλλοντός σας και ο κώδικάς σας πρέπει ακόμα να ταιριάζουν ακριβώς.

Η τρέχουσα τεκμηρίωση του Supabase χρησιμοποιεί τιμές όπως sb_publishable_... και sb_secret_.... Δείτε τον επίσημο οδηγό κλειδιών API του Supabase και τον οδηγό μετανάστευσης για κλειδιά publishable και secret.

Γρήγορη διόρθωση: βεβαιωθείτε ότι τα ονόματα των μεταβλητών ταιριάζουν με το framework και τον κώδικα

Για έναν τρέχοντα πελατειακό browser Next.js, το επίσημο quickstart του Supabase χρησιμοποιεί:

NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...

και:

import { createClient } from '@supabase/supabase-js'

const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY

if (!supabaseUrl || !supabaseKey) {
  throw new Error('Supabase environment variables are missing')
}

export const supabase = createClient(supabaseUrl, supabaseKey)

Για έναν τρέχοντα πελατειακό browser Vite/React, το επίσημο React quickstart του Supabase χρησιμοποιεί:

VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...

και τις διαβάζετε με:

const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
const supabaseKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY

Για κώδικα μόνο διακομιστή που χρειάζεται πραγματικά αυξημένη πρόσβαση, ο οδηγός κλειδιών API του Supabase δείχνει ένα μοτίβο όπως:

SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SECRET_KEY=sb_secret_...

Ποτέ μην τοποθετείτε sb_secret_... σε μια μεταβλητή που εκτίθεται σκόπιμα σε κώδικα browser, όπως μια μεταβλητή Vite VITE_* ή μια μεταβλητή Next.js NEXT_PUBLIC_*. Το Supabase αναφέρει ότι τα κλειδιά secret παρακάμπτουν το Row Level Security και πρέπει να παραμένουν σε πίσω μέρη (backend) ελεγχόμενα από τον προγραμματιστή.

Βήμα 1: επιβεβαιώστε ότι η τιμή λείπει πραγματικά κατά την εκτέλεση

Μην ξεκινήσετε αναγεννώντας κλειδιά ή επανεγκαθιστώντας πακέτα. Πρώτα αποδείξτε τι λαμβάνει η εφαρμογή σας.

Ο τρέχων πελάτης @supabase/supabase-js ελέγχει το δεύτερο όρισμα που περνά στον κατασκευαστή του πελάτη και ρίχνει supabaseKey is required. όταν αυτή η τιμή είναι ψευδής (falsy). Μπορείτε να δείτε αυτή τη συμπεριφορά στον επίσημο πηγαίο κώδικα supabase-js.

Εικονογράφηση τερματικού παραγόμενη από AI που δείχνει σφάλμα μεταβλητής περιβάλλοντος με έλλειψη κλειδιού API Supabase
Εικονογράφηση παραγόμενη από AI ενός σφάλματος έλλειψης κλειδιού API Supabase. Δεν είναι στιγμιότυπο οθόνης από πραγματικό έργο και το stack trace είναι ενδεικτικό.

Προσθέστε μια προσωρινή προστασία πριν από το createClient():

const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY

console.log('Supabase URL loaded:', Boolean(supabaseUrl))
console.log('Supabase key loaded:', Boolean(supabaseKey))
console.log(
  'Key type:',
  supabaseKey?.startsWith('sb_publishable_') ? 'publishable' : 'other/missing'
)

if (!supabaseUrl || !supabaseKey) {
  throw new Error('Supabase environment variables are missing')
}

Για το Vite, χρησιμοποιήστε την ίδια ιδέα με το import.meta.env.

Μην εκτυπώνετε ολόκληρο το κλειδί secret. Για αποσφαλμάτωση, μια τιμή boolean ή ένα αναμενόμενο πρόθεμα είναι αρκετό. Ένα κλειδί publishable προορίζεται για δημόσια συστατικά, αλλά η καταγραφή πλήρων διαπιστευτηρίων είναι ακόμα περιττή. Ένα κλειδί secret δεν πρέπει ποτέ να εκτίθεται σε logs πελατών.

Σημειώστε επίσης ότι η σύνταξη TypeScript όπως process.env.MY_KEY! ή process.env.MY_KEY as string δεν δημιουργεί μια τιμή που λείπει κατά την εκτέλεση. Αλλάζει μόνο αυτό που πιστεύει η TypeScript για τον τύπο. Εάν η μεταβλητή περιβάλλοντος απουσιάζει, το Supabase λαμβάνει ακόμα undefined.

Έλεγχος αυτοελέγχου: εάν η τιμή boolean για το κλειδί είναι false, σταματήστε να αποσφαλματώνετε δικαιώματα Supabase, έλεγχο ταυτότητας ή Row Level Security. Η εφαρμογή δεν έχει φορτώσει ακόμα τη διαμόρφωση.

Βήμα 2: χρησιμοποιήστε τον τρέχοντα τύπο κλειδιού—και κάντε τα παλιά και νέα ονόματα συνεπή

Ανοίξτε το παράθυρο διαλόγου Connect του έργου σας στο Supabase, ή μεταβείτε στις Ρυθμίσεις → Κλειδιά API. Η τρέχουσα τεκμηρίωση του Supabase προσδιορίζει ρητά τις Ρυθμίσεις → Κλειδιά API ως το μέρος για την προβολή όλων των κλειδιών API του έργου.

Για κώδικα που αποστέλλεται σε browser χρήστη, εφαρμογή κινητής τηλεφωνίας, εφαρμογή επιτραπέζιου υπολογιστή ή άλλο δημόσιο συστατικό, χρησιμοποιήστε ένα κλειδί publishable. Το Supabase αναφέρει ότι το κλειδί publishable είναι ασφαλές να εκτεθεί επειδή η πρόσβαση στη βάση δεδομένων ελέγχεται ακόμα από δικαιώματα (grants) και Row Level Security. Για συστατικά πίσω μέρους που ελέγχετε πλήρως, ένα κλειδί secret παρέχει αυξημένη πρόσβαση και παρακάμπτει το Row Level Security.

Η μετανάστευση από παλιά κλειδιά είναι μια κοινή πηγή σφάλματος “not found” επειδή οι ακόλουθοι συνδυασμοί δεν είναι ισοδύναμοι ως ονόματα μεταβλητών περιβάλλοντος:

Ο κώδικας διαβάζειΤο περιβάλλον ορίζειΑποτέλεσμα
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYΤαιριάζει
NEXT_PUBLIC_SUPABASE_ANON_KEYNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYΟ παλιός κώδικας διαβάζει undefined
VITE_SUPABASE_PUBLISHABLE_KEYSUPABASE_PUBLISHABLE_KEYΟ πελάτης Vite δεν εκθέτει τη μεταβλητή χωρίς πρόθεμα από προεπιλογή
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYVITE_SUPABASE_PUBLISHABLE_KEYΛανθασμένη ονοματολογία/πρότυπο πρόσβασης framework

Μια παλαιότερη μεταβλητή όπως NEXT_PUBLIC_SUPABASE_ANON_KEY δεν είναι αυτόματα άκυρη. Εάν το έργο σας έχει ακόμα ένα ενεργό παλιό κλειδί anon και ο κώδικάς σας διαβάζει αυτήν την ακριβή μεταβλητή, μπορεί να συνεχίσει να λειτουργεί κατά τη διάρκεια της περιόδου μετανάστευσης του Supabase. Το πρόβλημα είναι η αντιγραφή ενός νέου κλειδιού publishable σε ένα όνομα μεταβλητής ενώ ο κώδικας διαβάζει ακόμα ένα άλλο.

Έλεγχος αυτοελέγχου: αναζητήστε στο έργο σας για SUPABASE_. Συγκρίνετε κάθε όνομα μεταβλητής στον κώδικα με τα ακριβή ονόματα στα αρχεία περιβάλλοντος και τις ρυθμίσεις ανάπτυξης. Μην βασίζεστε στη μνήμη.

Βήμα 3: τοποθετήστε το αρχείο .env όπου το framework σας το φορτώνει πραγματικά

Ένα σωστό κλειδί στη λάθος τοποθεσία αρχείου είναι ουσιαστικά ένα κλειδί που λείπει.

Εικονογράφηση εξερευνητή έργου παραγόμενη από AI που δείχνει ένα αρχείο περιβάλλοντος στη ρίζα του έργου δίπλα στο package.json
Εικονογράφηση δέντρου έργου παραγόμενη από AI που δείχνει το αρχείο περιβάλλοντος στη ρίζα της εφαρμογής. Δεν είναι στιγμιότυπο οθόνης ενός συγκεκριμένου IDE ή έργου framework.

Next.js: κρατήστε τα αρχεία .env στη ρίζα του έργου

Το Next.js έχει ενσωματωμένη υποστήριξη για αρχεία .env*. Ο τρέχων οδηγός μεταβλητών περιβάλλοντος αναφέρει ότι εάν χρησιμοποιείτε έναν κατάλογο /src, τα αρχεία περιβάλλοντος ανήκουν ακόμα στη ρίζα του έργου, όχι μέσα στο /src. Δείτε τον επίσημο οδηγό μεταβλητών περιβάλλοντος του Next.js.

Μια τυπική διάταξη είναι:

my-app/
  .env.local
  package.json
  next.config.js
  app/
  src/        # if used

Για κώδικα πλευράς browser, το Next.js εκθέτει μόνο μεταβλητές που χρησιμοποιούν το πρόθεμα NEXT_PUBLIC_. Αυτές οι τιμές ενσωματώνονται (inlined) στο bundle του browser κατά τον χρόνο δόμησης (build time).

Vite: χρησιμοποιήστε VITE_ και import.meta.env

Το Vite εκθέτει μεταβλητές περιβάλλοντος πελατών μέσω του import.meta.env. Από προεπιλογή, μόνο ονόματα με πρόθεμα VITE_ εκτίθενται σε κώδικα πελατών. Η επίσημη οδηγός Vite για μεταβλητές περιβάλλοντος και λειτουργίες τεκμηριώνει αυτό άμεσα.

Αυτό θα λειτουργήσει σε έναν πελάτη Vite:

VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
const url = import.meta.env.VITE_SUPABASE_URL
const key = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY

Αυτό θα είναι κανονικά undefined σε κώδικα browser Vite:

const key = import.meta.env.SUPABASE_PUBLISHABLE_KEY

επειδή του λείπει το προεπιλεγμένο πρόθεμα έκθεσης VITE_.

Κώδικας Node/διακομιστή: μην αντιγράφετε τυφλά προθέματα browser

Ο κώδικας διακομιστή διαβάζει κανονικά από το process.env. Εάν ένα κλειδί δεν χρειάζεται να είναι διαθέσιμο στο browser, μην προσθέτετε ένα δημόσιο πρόθεμα απλώς για να το κάνετε ορατό. Το Supabase προειδοποιεί συγκεκριμένα ότι τα κλειδιά secret είναι μόνο για πίσω μέρος (backend).

Έλεγχος αυτοελέγχου: επαληθεύστε τρία πράγματα μαζί: το αρχείο env βρίσκεται στη ρίζα της εφαρμογής, το όνομα της μεταβλητής χρησιμοποιεί το σωστό πρόθεμα framework και ο κώδικας χρησιμοποιεί τον σωστό accessor του framework—process.env για Next.js/Node ή import.meta.env για κώδικα πελάτη Vite.

Βήμα 4: κάντε επανεκκίνηση του διακομιστή ανάπτυξης μετά την αλλαγή αρχείων περιβάλλοντος

Οι μεταβλητές περιβάλλοντος φορτώνονται συνήθως όταν ξεκινά η διαδικασία ανάπτυξης. Το Vite τεκμηριώνει ρητά ότι τα αρχεία .env φορτώνονται κατά την εκκίνηση και ότι πρέπει να κάνετε επανεκκίνηση του διακομιστή μετά από αλλαγές.

Σταματήστε την τρέχουσα διαδικασία και ξεκινήστε την ξανά:

# Next.js
npm run dev

# Vite
npm run dev
Εικονογράφηση τερματικού παραγόμενη από AI που δείχνει έναν διακομιστή ανάπτυξης που επανεκκινήθηκε επιτυχώς χωρίς σφάλμα μεταβλητής περιβάλλοντος
Εικονογράφηση τερματικού παραγόμενη από AI της επανεκκίνησης ενός διακομιστή ανάπτυξης και της επίτευξης καθαρής εκκίνησης. Δεν είναι έξοδος από μια πραγματική ανάπτυξη Supabase.

Εάν το σφάλμα εμφανίστηκε μόνο αφού δημιουργήσατε το αρχείο περιβάλλοντος ενώ ο διακομιστής λειτουργούσε ήδη, μια επανεκκίνηση μπορεί να είναι ολόκληρη η διόρθωση.

Έλεγχος αυτοελέγχου: εκτελέστε ξανά τους προσωρινούς ελέγχους boolean. Εάν οι τιμές φορτώνονται τώρα, αφαιρέστε την περιττή έξοδο αποσφαλμάτωσης και συνεχίστε σε μια κανονική λειτουργία Supabase.

Χρησιμοποιήστε μια προστασία χρόνου εκτέλεσης αντί να κρύβετε το πρόβλημα με TypeScript

Ένα χρήσιμο μοτίβο παραγωγής είναι να αποτυγχάνετε με ένα σαφές μήνυμα διαμόρφωσης πριν καλέσετε το Supabase:

import { createClient } from '@supabase/supabase-js'

const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY

if (!supabaseUrl) {
  throw new Error('NEXT_PUBLIC_SUPABASE_URL is missing')
}

if (!supabaseKey) {
  throw new Error('NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY is missing')
}

export const supabase = createClient(supabaseUrl, supabaseKey)
Εικονογράφηση κώδικα παραγόμενη από AI που δείχνει μια προστασία χρόνου εκτέλεσης πριν από τη δημιουργία ενός πελάτη Supabase
Εικονογράφηση κώδικα παραγόμενη από AI του ελέγχου της διαμόρφωσης πριν από την κλήση createClient(). Είναι ένα εννοιολογικό παράδειγμα, όχι στιγμιότυπο οθόνης από την τεκμηρίωση του SDK Supabase.

Αυτό είναι καλύτερο από:

createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY!
)

όταν κάνετε αποσφαλμάτωση, επειδή η μη-μηδενική δήλωση (non-null assertion) μπορεί να κρύψει την προειδοποίηση TypeScript χωρίς να αλλάξει την τιμή χρόνου εκτέλεσης.

Εάν λειτουργεί τοπικά αλλά αποτυγχάνει μετά την ανάπτυξη

Αυτό είναι συνήθως ένα πρόβλημα περιβάλλοντος ανάπτυξης, όχι ένα πρόβλημα έργου Supabase.

Τα τοπικά αρχεία .env.local κανονικά δεν δεσμεύονται στο Git—και δεν πρέπει να θεωρούνται ως μηχανισμός παράδοσης μυστικών παραγωγής. Ρυθμίστε τα ίδια ονόματα μεταβλητών στις ρυθμίσεις έργου του παρόχου φιλοξενίας σας.

Για παράδειγμα, το Vercel τεκμηριώνει ξεχωριστά περιβάλλοντα Production, Preview και Development. Αναφέρει επίσης ότι οι αλλαγές στις μεταβλητές περιβάλλοντος ισχύουν μόνο για νέες αναπτύξεις, οπότε πρέπει να κάνετε νέα ανάπτυξη μετά την προσθήκη ή την αλλαγή τους. Δείτε τον επίσημο οδηγό διαχείρισης μεταβλητών περιβάλλοντος του Vercel.

Ελέγξτε:

  • Είναι η μεταβλητή ορισμένη για το Production, όχι μόνο για το Preview;
  • Ταιριάζει το όνομα ακριβώς με τον κώδικα;
  • Δημιουργήθηκε νέα ανάπτυξη μετά την προσθήκη της μεταβλητής;
  • Ήταν η δημόσια μεταβλητή παρούσα όταν χτίστηκε το bundle του πελάτη;

Οι δημόσιες μεταβλητές Next.js είναι τιμές χρόνου δόμησης

Το Next.js τεκμηριώνει ότι οι μεταβλητές NEXT_PUBLIC_* ενσωματώνονται (inlined) σε JavaScript browser κατά τον χρόνο δόμησης. Αφού χτιστεί η εφαρμογή, η αλλαγή του περιβάλλοντος εκτέλεσης δεν ξαναγράφει αυτές τις τιμές στο υπάρχον bundle του πελάτη. Εάν χτίσετε μια εικόνα Docker χωρίς NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY και αργότερα την εισάγετε μόνο όταν ξεκινά το container, ο κώδικας browser μπορεί ακόμα να περιέχει την τιμή που λείπει από τον χρόνο δόμησης.

Διόρθωση: παρέχετε δημόσιες τιμές Supabase κατά τη διάρκεια της δόμησης που παράγει το bundle του πελάτη, ή ανασχεδιάστε την εφαρμογή για να παρέχει διαμόρφωση χρόνου εκτέλεσης μέσω ενός μηχανισμού ελεγχόμενου από διακομιστή.

Το Vite επίσης αντικαθιστά τιμές περιβάλλοντος πελατών κατά τη δόμηση

Η τεκμηρίωση του Vite αναφέρει ότι οι σταθερές import.meta.env αντικαθίστανται στατικά κατά τη δέσμευση (bundling). Επομένως, εάν η τοπική ανάπτυξη λειτουργεί αλλά το bundle παραγωγής δεν λειτουργεί, επαληθεύστε ότι οι VITE_SUPABASE_URL και VITE_SUPABASE_PUBLISHABLE_KEY υπήρχαν στο περιβάλλον δόμησης—όχι μόνο στη μηχανή που εξυπηρετεί αργότερα τα στατικά αρχεία.

Monorepos: ελέγξτε ποιος κατάλογος είναι πραγματικά η ρίζα της εφαρμογής

Ένα monorepo μπορεί να περιέχει:

repo/
  package.json
  apps/
    web/
      package.json
      .env.local
      app/
  packages/
    ui/

Εάν η εντολή Next.js ή Vite εκτελείται με το apps/web ως ρίζα της εφαρμογής, ένα αρχείο περιβάλλοντος τοποθετημένο μόνο στο repo/.env.local μπορεί να μην είναι το αρχείο που φορτώνει το framework. Το envDir του Vite έχει ως προεπιλογή τη ρίζα του έργου, και το Next.js αναμένει τα αρχεία .env* του στη ρίζα του έργου Next.js.

Διόρθωση: εντοπίστε τον κατάλογο που περιέχει το package.json και τη διαμόρφωση framework της εφαρμογής, στη συνέχεια τοποθετήστε το αρχείο env όπου το περιμένει αυτή η εφαρμογή ή ρυθμίστε ρητά τον κατάλογο περιβάλλοντος όταν το framework το υποστηρίζει.

Οι Edge Functions του Supabase χρησιμοποιούν διαφορετικά τρέχοντα προεπιλεγμένα ονόματα μεταβλητών

Εάν το σφάλμα βρίσκεται μέσα σε μια Edge Function του Supabase, μην αντιγράφετε τυφλά ένα παράδειγμα Next.js ή Vite.

Η τρέχουσα τεκμηρίωση μεταβλητών περιβάλλοντος Edge Functions του Supabase παραθέτει αυτά τα προεπιλεγμένα μυστικά, μεταξύ άλλων:

  • SUPABASE_URL
  • SUPABASE_DB_URL
  • SUPABASE_PUBLISHABLE_KEYS
  • SUPABASE_SECRET_KEYS
  • SUPABASE_JWKS

Παρατηρήστε ότι τα SUPABASE_PUBLISHABLE_KEYS και SUPABASE_SECRET_KEYS είναι πληθυντικός. Ο οδηγός μετανάστευσης του Supabase εξηγεί ότι αυτές οι νέες μεταβλητές περιέχουν αντικείμενα JSON με κλειδιά το όνομα του κλειδιού API. Για ένα προεπιλεγμένο κλειδί secret:

const secretKeys = JSON.parse(
  Deno.env.get('SUPABASE_SECRET_KEYS') ?? '{}'
)

const secretKey = secretKeys['default']

if (!secretKey) {
  throw new Error('Default Supabase secret key is missing')
}

Κατά τη διάρκεια της μετανάστευσης, παλιές μεταβλητές Edge Function όπως SUPABASE_ANON_KEY και SUPABASE_SERVICE_ROLE_KEY μπορούν να υπάρχουν παράλληλα με τα νέα λεξικά κλειδιών. Μην υποθέτετε ότι το όνομα της μεταβλητής από ένα παλιό tutorial συνάρτησης ταιριάζει με τον νέο τύπο κλειδιού που μόλις δημιουργήσατε.

Μην επιλύετε το σφάλμα εκθέτοντας ένα κλειδί secret

Ένας δελεαστικός “διόρθωση” είναι να προσθέσετε NEXT_PUBLIC_ ή VITE_ σε ένα μυστικό διακομιστή ώστε το browser να μπορεί επιτέλους να το διαβάσει. Αυτό μπορεί να εξαλείψει το σφάλμα έλλειψης μεταβλητής ενώ δημιουργεί ένα πρόβλημα ασφαλείας.

Ο τρέχων οδηγός κλειδιών API του Supabase είναι ρητός:

  • Κλειδί publishable: προορίζεται για δημόσια συστατικά όπως εφαρμογές browser και κινητής τηλεφωνίας.
  • Κλειδί secret: προορίζεται μόνο για συστατικά πίσω μέρους που ελέγχετε. Παρακάμπτει το Row Level Security.

Εάν ένα κλειδί secret έχει εκτεθεί σε πηγαίο κώδικα, δημόσιο bundle, στιγμιότυπο οθόνης ή αποθετήριο, αφαιρέστε το ή περιστρέψτε το μέσω των ρυθμίσεων Κλειδιών API του Supabase αντί απλώς να μετονομάσετε τη μεταβλητή περιβάλλοντος.

Συχνά συμπτώματα και ο γρηγορότερος έλεγχος

ΣύμπτωμαΠιο πιθανό μέρος για έλεγχο
supabaseKey is required. αμέσως κατά την εκκίνησηΤο δεύτερο όρισμα στο createClient() είναι κενό ή undefined
Το Next.js λειτουργεί στον διακομιστή αλλά το κλειδί είναι undefined σε ένα Client ComponentΛείπει το πρόθεμα NEXT_PUBLIC_, λάθος όνομα ή λείπει η τιμή χρόνου δόμησης
Το Vite δείχνει undefinedΛείπει το πρόθεμα VITE_ ή χρήση process.env αντί για import.meta.env
Λειτουργεί τοπικά, αποτυγχάνει στην παραγωγήΜεταβλητές περιβάλλοντος φιλοξενίας, εμβέλεια Production/Preview ή έλλειψη επαναδόμησης/επανανάπτυξης
Λειτουργούσε με ANON_KEY, χάλασε μετά τη μετανάστευσηΟ κώδικας και το αρχείο env χρησιμοποιούν διαφορετικά ονόματα μεταβλητών παλιά/νέα
Η Edge Function δεν μπορεί να βρει το SUPABASE_SECRET_KEYΟι τρέχουσες προεπιλογές Edge Function χρησιμοποιούν SUPABASE_SECRET_KEYS ως λεξικό JSON
Η TypeScript μεταγλωττίζεται μετά την προσθήκη ! αλλά η εκτέλεση αποτυγχάνει ακόμαΗ δήλωση άλλαξε μόνο τον τύπο. Η τιμή περιβάλλοντος λείπει ακόμα

Τελικός αυτοέλεγχος: επαληθεύστε τη διαμόρφωση στη σωστή σειρά

Πριν δηλώσετε ότι το θέμα έχει διορθωθεί, εκτελέστε αυτήν την λίστα ελέγχου:

  1. Επιβεβαιώστε ότι το Project URL του Supabase προέρχεται από το έργο που πραγματικά σκοπεύετε να χρησιμοποιήσετε.
  2. Για κώδικα browser/πελάτη, επιβεβαιώστε ότι χρησιμοποιείτε ένα τρέχον κλειδί publishable ή ένα ακόμα ενεργό παλιό κλειδί anon—όχι ένα κλειδί secret.
  3. Επιβεβαιώστε ότι ο κώδικας και το αρχείο περιβάλλοντος χρησιμοποιούν τα ίδια ονόματα μεταβλητών.
  4. Για κώδικα πελάτη Next.js, χρησιμοποιήστε NEXT_PUBLIC_* και άμεσες αναφορές process.env.VARIABLE_NAME.
  5. Για κώδικα πελάτη Vite, χρησιμοποιήστε VITE_* και import.meta.env.VARIABLE_NAME.
  6. Κρατήστε το .env.local στη ρίζα της εφαρμογής αντί μέσα στο /src.
  7. Κάντε επανεκκίνηση του διακομιστή ανάπτυξης μετά την επεξεργασία αρχείων περιβάλλοντος.
  8. Για παραγωγή, ορίστε τις τιμές στο σωστό περιβάλλον ανάπτυξης και κάντε επαναδόμηση/επανανάπτυξη.
  9. Μην καταγράφετε ή εκθέτετε κλειδιά sb_secret_....
  10. Αφαιρέστε προσωρινά logs αποσφαλμάτωσης μόλις επιβεβαιωθεί η διαμόρφωση.

Όταν το createClient() αρχικοποιείται χωρίς το σφάλμα έλλειψης κλειδιού, το πρόβλημα μεταβλητής περιβάλλοντος έχει επιλυθεί. Εάν το επόμενο αίτημα Supabase επιστρέψει ένα σφάλμα εξουσιοδότησης, Row Level Security ή δικαιώματος πίνακα, αντιμετωπίστε το ως ξεχωριστό θέμα. Ένα έγκυρο κλειδί API δεν εγγυάται ότι ο καλών επιτρέπεται να διαβάσει ή να τροποποιήσει κάθε γραμμή. Το Supabase διαχωρίζει σκόπιμα την αναγνώριση κλειδιού API από τον έλεγχο ταυτότητας χρήστη και την εξουσιοδότηση βάσης δεδομένων.

Η διαρκής διόρθωση δεν είναι “μετονομάστε το κλειδί μέχρι να λειτουργήσει”. Είναι να ευθυγραμμίσετε τέσσερα πράγματα: τον τρέχοντα τύπο κλειδιού Supabase, το όνομα της μεταβλητής περιβάλλοντος, τους κανόνες έκθεσης του framework και το περιβάλλον στο οποίο η εφαρμογή χτίζεται ή εκτελείται πραγματικά. Μόλις αυτά συμφωνήσουν, ο πελάτης Supabase λαμβάνει ένα πραγματικό κλειδί αντί για undefined, και ο παραπλανητικός βρόχος διαμόρφωσης τελειώνει.

Αφήστε ένα σχόλιο

Πώς να διορθώσετε το σφάλμα "Τα στυλ CSS Tailwind δεν ενημερώνονται" σε μια εφαρμογή Vite React

Πώς να διορθώσετε το σφάλμα "Τα στυλ CSS Tailwind δεν ενημερώνονται" σε μια εφαρμογή Vite React

Διορθώστε τα στυλ CSS του Tailwind που δεν ενημερώνονται στο Vite React ελέγχοντας τη ρύθμιση του Tailwind v4, τις εισαγωγές CSS, την ανίχνευση πηγαίου κώδικα, τις δυναμικές κλάσεις, το HMR και τις παλιές προσωρινές μνήμες.

Πώς να διορθώσετε το σφάλμα ModuleNotFoundError: Δεν υπάρχει ενότητα με το όνομα 'pip' στην Python 3

Πώς να διορθώσετε το σφάλμα ModuleNotFoundError: Δεν υπάρχει ενότητα με το όνομα 'pip' στην Python 3

Διορθώστε το σφάλμα ModuleNotFoundError της Python 3 για το pip σε Windows, macOS και Linux με το ensurepip, πακέτα λειτουργικού συστήματος, εικονικά περιβάλλοντα και ελέγχους διερμηνέα.

Πώς να διορθώσετε το σφάλμα "Άρνηση άδειας (δημόσιο κλειδί)" στο GitHub SSH

Πώς να διορθώσετε το σφάλμα "Άρνηση άδειας (δημόσιο κλειδί)" στο GitHub SSH

Διορθώστε το πρόβλημα "Απόρριψη άδειας SSH GitHub (publickey)" ελέγχοντας τον κεντρικό υπολογιστή, το ενεργό κλειδί SSH, τον λογαριασμό GitHub, την εξουσιοδότηση SSO, την απομακρυσμένη διεύθυνση URL και την πρόσβαση στη θύρα 22.

Πώς να διορθώσετε το σφάλμα "Git Push Rejected: Non-Fast-Forward" χωρίς να χάσετε αλλαγές

Πώς να διορθώσετε το σφάλμα "Git Push Rejected: Non-Fast-Forward" χωρίς να χάσετε αλλαγές

Διορθώστε με ασφάλεια μια μη γρήγορη προώθηση σε Git. Προστατέψτε την τοπική εργασία, ανακτήστε απομακρυσμένες υποβολές, επιλέξτε συγχώνευση ή αλλαγή βάσης, επιλύστε διενέξεις και προωθήστε χωρίς να χάσετε αλλαγές.

Πώς να διορθώσετε το σφάλμα "Nginx 502 Bad Gateway" κατά τη μεσολάβηση στο Node.js

Πώς να διορθώσετε το σφάλμα "Nginx 502 Bad Gateway" κατά τη μεσολάβηση στο Node.js

Διορθώστε τα σφάλματα Nginx 502 Bad Gateway με ένα Node.js upstream ελέγχοντας τη θύρα εφαρμογής, τα αρχεία καταγραφής NGINX, τη διεύθυνση proxy_pass, τη δικτύωση κοντέινερ, τα χρονικά όρια και την επαναφόρτωση.

How to Fix “Type 'null' Is Not Assignable to Type” in TypeScript

How to Fix “Type 'null' Is Not Assignable to Type” in TypeScript

Fix TypeScript's “Type 'null' is not assignable to type” error with union types, narrowing, defaults, and safe assertions under strictNullChecks.

Πώς να διορθώσετε το σφάλμα «Το Prisma Client δεν έχει δημιουργηθεί ακόμη»

Πώς να διορθώσετε το σφάλμα «Το Prisma Client δεν έχει δημιουργηθεί ακόμη»

Διορθώστε το σφάλμα μη δημιουργημένου Prisma Client ελέγχοντας τον generator, το schema, τη διαδρομή εξόδου, τα imports, τις εκδόσεις, τη ρύθμιση monorepo και τα βήματα build της ανάπτυξης.

Πώς να διορθώσετε το σφάλμα "ERR_MODULE_NOT_FOUND" στις εισαγωγές ESM του Node.js

Πώς να διορθώσετε το σφάλμα "ERR_MODULE_NOT_FOUND" στις εισαγωγές ESM του Node.js

Διορθώστε το σφάλμα Node.js ERR_MODULE_NOT_FOUND στο ESM ελέγχοντας τις διαδρομές εισαγωγής, τις επεκτάσεις αρχείων, την εγκατάσταση πακέτων, τις εξαγωγές, τη λειτουργία ESM και τις καθαρές εγκαταστάσεις.

Πώς να διορθώσετε το πρόβλημα πιστοποιητικού SSL: Unable to Get Local Issuer Certificate στο Git

Πώς να διορθώσετε το πρόβλημα πιστοποιητικού SSL: Unable to Get Local Issuer Certificate στο Git

Διορθώστε το σφάλμα του Git «unable to get local issuer certificate» εντοπίζοντας το backend εμπιστοσύνης, εγκαθιστώντας τη σωστή αλυσίδα CA και διατηρώντας ενεργή την επαλήθευση SSL.

Πώς να διορθώσετε το σφάλμα λήξης χρόνου δικτύου του MongoDB στη σύνδεση Mongoose

Πώς να διορθώσετε το σφάλμα λήξης χρόνου δικτύου του MongoDB στη σύνδεση Mongoose

Διορθώστε τα σφάλματα λήξης χρόνου δικτύου του MongoDB στο Mongoose εντοπίζοντας τον τύπο λήξης, ελέγχοντας την προσβασιμότητα Atlas ή TCP, διορθώνοντας το URI και ρυθμίζοντας τα timeouts μόνο όταν δικαιολογείται.