Heim
» Grundvallarþekking
»
Hvernig á að laga Supabase API-lykil sem finnst ekki í umhverfisbreytum
Hvernig á að laga Supabase API-lykil sem finnst ekki í umhverfisbreytum
Síðast staðfest: 11. september 2026. Þú bætir Supabase URL og API-lykli við í .env skrá, endurræsir forritið og fær samt villu eins og “Supabase API key not found” eða Supabase eigin supabaseKey is required. Í flestum tilfellum er lykillinn til einhvers staðar, en kóðinn sem kallar á createClient() fær undefined eða tóman streng.
Það er einnig mikilvæg nafnbreyting árið 2026 sem liggur að baki mörgum ruglingslegum leiðbeiningum. Supabase er að fasa út eldri anon og service_role API-lykla fyrir árslok 2026 og mælir nú með publishable (útgáfu) lyklum fyrir opinbera/kóða á vafra og secret (leyndar) lyklum fyrir traustan þjónakóða. Eldri lyklar geta haldið áfram að virka meðan á yfirsöfnun stendur þar til þú óvirkjar þá, en nafnið á umhverfisbreytunni þinni og kóðinn þinn verða samt að passa nákvæmlega saman.
Settu aldrei sb_secret_... í breytu sem er viljandi sýnd í vafra kóða, eins og Vite VITE_* breytu eða Next.js NEXT_PUBLIC_* breytu. Supabase segir að leyndar lyklar fari framhjá Row Level Security (raðaröryggisreglum) og verði að vera í bakenda hlutum sem þú stjórnar.
Skref 1: Staðfestu að gildið vanti raunverulega í keyrslutíma
Byrjaðu ekki á að endurgera lykla eða endursetja pakka. Sannaðu fyrst hvað forritið þitt fær.
Núverandi @supabase/supabase-js viðtakandi athugar annað argumentið sem sent er til viðtakanda smiðsins og kastar supabaseKey is required. þegar gildið er falskt. Þú sérð þessa hegðun í opinberu supabase-js upprunakóða.
AI-búin myndskreyting af vantar Supabase API-lykil villu. Þetta er ekki skjámynd úr raunverulegu verkefni og stack trace er til sýnis.
Fyrir Vite, notaðu sömu hugmynd með import.meta.env.
Ekki prenta allan leyndar lykilinn. Fyrir villuleit er boolean eða væntur forskeyti nægilegt. Publishable lykill er hannaður fyrir opinbera hluti, en að skrá fullar auðkennisupplýsingar er samt óþarfi; leyndar lykill má aldrei birtast í vafra loggum.
Taktu einnig eftir að TypeScript setningafræði eins og process.env.MY_KEY! eða process.env.MY_KEY as string býr ekki til vantið gildi í keyrslutíma. Það breytir aðeins því hvað TypeScript heldur um tegundina. Ef umhverfisbreytan er ekki til, fær Supabase samt undefined.
Sjálfpróf: Ef boolean fyrir lykilinn er false, hættu að leita að Supabase heimildum, auðkenningu eða Row Level Security. Forritið hefur ekki hlaðið upp stillingunum ennþá.
Skref 2: Notaðu núverandi lyklagerð—og gerðu gömul og ný heiti samræmd
Opnaðu Connect gluggann í Supabase verkefninu þínu, eða farðu í Settings → API Keys. Núverandi Supabase skjölun nefnir skýrt Settings → API Keys sem staðinn til að skoða alla verkefnis API-lykla.
Fyrir kóða sem fer til vafra notanda, farsímaforrits, skjáborðsforrits eða annars opinbers hluta, notaðu publishable lykil. Supabase segir að publishable lykill sé öruggur að birta því aðgangur að gagnagrunni er enn stjórnað af heimildum og Row Level Security. Fyrir bakenda hluti sem þú stjórnar að fullu, veitir leyndar lykill aukinn aðgang og fer framhjá Row Level Security.
Yfirsöfnun frá eldri lyklum er algeng ástæða fyrir “not found” villu því eftirfarandi samsetningar eru ekki jafngildar sem umhverfisbreytuheiti:
Kóði les
Umhverfi skilgreinir
Niðurstaða
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
Passar
NEXT_PUBLIC_SUPABASE_ANON_KEY
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
Gamall kóði les undefined
VITE_SUPABASE_PUBLISHABLE_KEY
SUPABASE_PUBLISHABLE_KEY
Vite viðtakandi birtir ekki forskeytislausa breytu sjálfgefið
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
VITE_SUPABASE_PUBLISHABLE_KEY
Rangt rammaverk heiti/aðgangsmynstur
Eldri breyta eins og NEXT_PUBLIC_SUPABASE_ANON_KEY er ekki sjálfkrafa ógild. Ef verkefnið þitt hefur enn virkan eldri anon lykil og kóðinn þinn les nákvæmlega þá breytu, getur hún haldið áfram að virka meðan á yfirsöfnunartímabil Supabase stendur. Vandamálið er að afrita nýjan publishable lykil í eitt breytuheiti á meðan kóðinn les ennþá annað.
Sjálfpróf: Leitaðu í verkefninu þínu að SUPABASE_. Berðu saman hvert breytuheiti í kóðanum við nákvæm heiti í umhverfisskránum þínum og útfærslustillingum. Ekki treysta á minnið.
Skref 3: Settu .env skrána þar sem rammaverkið þitt hleður hana raunverulega
Réttur lykill í rangri staðsetningu skráar er í raun vantar lykill.
AI-búin verkefnatrjá myndskreyting sem sýnir umhverfisskráina í rót forritsins. Þetta er ekki skjámynd af tilteknu IDE eða rammaverkaverkefni.
Next.js: Haltu .env skrám í rót verkefnisins
Next.js hefur innbyggða stuðning fyrir .env* skrár. Núverandi umhverfisbreytuleiðbeiningar þess segja að ef þú notar /src möppu, tilheyra umhverfisskrárnar ennþá rót verkefnisins, ekki inni í /src. Sjá opinberar Next.js umhverfisbreytuleiðbeiningar.
Dæmigerð uppsetning er:
my-app/
.env.local
package.json
next.config.js
app/
src/ # ef notað
Fyrir kóða á vafrahlið, Next.js birtir aðeins breytur sem nota NEXT_PUBLIC_ forskeytið. Þau gildi eru innfelld í vafra bundle við byggingartíma.
Vite: Notaðu VITE_ og import.meta.env
Vite birtir viðtakanda umhverfisbreytur í gegnum import.meta.env. Sjálfgefið eru aðeins heiti með VITE_ forskeyti sýnd í viðtakanda kóða. Opinbera Vite Env Variables and Modes leiðbeiningar skjalfesta þetta beint.
vegna þess að það vantar sjálfgefna VITE_ birtuforskeytið.
Node/þjónakóði: Ekki afrita vafra forskeyti blindlega
Þjónakóði les venjulega úr process.env. Ef lykill þarf ekki að vera tiltækur í vafra, ekki bæta við opinberu forskeyti bara til að gera hann sýnilegan. Supabase varar sérstaklega við að leyndar lyklar séu einungis fyrir bakenda.
Sjálfpróf: Staðfestu þrjú hluti saman: env skráin er í rót forritsins, breytuheitið notar rétt rammaverk forskeyti, og kóðinn notar réttan aðgangsaðila rammaverksins—process.env fyrir Next.js/Node eða import.meta.env fyrir Vite viðtakanda kóða.
Skref 4: Endurræstu þróunarþjóninn eftir breytingar á umhverfisskrám
Umhverfisbreytur eru oftast hlaðnar þegar þróunarferlið hefst. Vite skjalfestir sérstaklega að .env skrár séu hlaðnar við ræsingu og að þú ættir að endurræsa þjóninn eftir breytingar.
Stöðvaðu núverandi ferli og ræstu það aftur:
# Next.js
npm run dev
# Vite
npm run dev
AI-búin terminal myndskreyting af endurræsingar þróunarþjóns og að ná hreinni ræsingu. Þetta er ekki úttak úr raunverulegri Supabase útfærslu.
Ef villan kom fram aðeins eftir að þú bjóst til umhverfisskrána á meðan þjónninn var nú þegar keyrandi, gæti endurræsing verið alltaf lausnin.
Sjálfpróf: Keyrðu tímabundnu boolean prófin aftur. Ef gildin eru nú hlaðin, fjarlægðu óþarfa villuleitarúttak og haltu áfram í eðlilega Supabase aðgerð.
Notaðu keyrslutíma vörn í stað þess að fela vandamálið með TypeScript
Nytlegt framleiðslumynstur er að mistakast með skýra stillingaskilaboð áður en Supabase er kallað:
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-búin kóða myndskreyting af athugun á stillingum áður en createClient() er kallað. Þetta er huglægt dæmi, ekki skjámynd úr Supabase SDK skjölun.
þegar þú ert að leita að villum, vegna þess að non-null fullyrðingin getur falið TypeScript viðvörunina án þess að breyta keyrslutímagildinu.
Ef það virkar staðbundið en mistekst eftir útfærslu
Þetta er yfirleitt vandamál í útfærsluumhverfinu, ekki í Supabase verkefninu.
Staðbundnar .env.local skrár eru venjulega ekki settar í Git—og ættu ekki að vera treated sem framleiðslu leyndarafhendingarkerfi. Stilltu sömu breytuheiti í stillingum hýsingarveitunnar þinnar.
Til dæmis, Vercel skjalfestir aðskildar Production, Preview og Development umhverfi. Það segir einnig að breytingar á umhverfisbreytum gildi aðeins fyrir nýjar útfærslur, svo þú verður að endurútfæra eftir að þú bætir við eða breytir þeim. Sjá opinberar Vercel umhverfisbreytustjórnunarleiðbeiningar.
Athugaðu:
Er breytan skilgreind fyrir Production, ekki bara Preview?
Passar heitið nákvæmlega við kóðann?
Var ný útfærsla búin til eftir að breytan var bætt við?
Var opinbera breytan til staðar þegar viðtakanda bundle var byggt?
Next.js opinberar breytur eru byggingartímagildi
Next.js skjalfestir að NEXT_PUBLIC_* breytur séu innfelldar í vafra JavaScript við byggingartíma. Eftir að appið er byggt, að breyta keyrsluumhverfinu endurskrifar ekki þau gildi í núverandi viðtakanda bundle. Ef þú byggir Docker mynd án NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY og sprautar því síðar inn aðeins þegar ílátinu er ræst, getur vafra kóðinn enn innihaldið vantið byggingartímagildið.
Lagning: Veittu opinber Supabase gildi við bygginguna sem framleiðir viðtakanda bundle, eða endurhannaðu forritið til að veita keyrslutíma stillingar í gegnum þjónastýrt kerfi.
Vite skiptir einnig út viðtakanda env gildum við byggingu
Skjölun Vite segir að import.meta.env fastar séu staðbundið skiptir út við bundling. Þess vegna, ef staðbundin þróun virkar en framleiðslu bundle virkar ekki, staðfestu að VITE_SUPABASE_URL og VITE_SUPABASE_PUBLISHABLE_KEY hafi verið til staðar í byggingarumhverfinu—ekki bara á vélinni sem síðar þjónar statískum skrám.
Monorepos: Athugaðu hvaða mappa er raunverulega app rótin
Ef Next.js eða Vite skipunin keyrir með apps/web sem forritsrót, getur umhverfisskrá sett aðeins í repo/.env.local ekki verið skráin sem rammaverkið hleður. Vite envDir er sjálfgefið rót verkefnisins, og Next.js búist við .env* skrám sínum í rót Next.js verkefnisins.
Lagning: Auðkennaðu möppuna sem inniheldur package.json forritsins og rammaverk stillingar, settu síðan env skrána þar sem appið búist við henni eða stilltu umhverfismöppuna skýrt þegar rammaverkið styður það.
Supabase Edge Functions nota önnur núverandi sjálfgefin breytuheiti
Ef villan er inni í Supabase Edge Function, ekki afrita blindlega Next.js eða Vite dæmi.
Taktu eftir að SUPABASE_PUBLISHABLE_KEYS og SUPABASE_SECRET_KEYS eru í fleirtölu. Yfirsöfnunarleiðbeiningar Supabase útskýra að þessar nýju breytur innihalda JSON hluti lyklaðir eftir API-lykla heiti. Fyrir sjálfgefinn leyndar lykil:
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')
}
Meðan á yfirsöfnun stendur, geta eldri Edge Function breytur eins og SUPABASE_ANON_KEY og SUPABASE_SERVICE_ROLE_KEY verið til staðar við hliðina á nýju lyklaborðunum. Ekki gera ráð fyrir að breytuheitið úr gamalli function leiðbeiningum passi við nýju lyklagerðina sem þú bjóst nýlega til.
Ekki leysa villuna með því að birta leyndar lykil
Freistandi “lagning” er að bæta NEXT_PUBLIC_ eða VITE_ við þjónaleyndar svo vafrið geti loksins lesið hann. Það getur eytt vantar breytu villunni en búið til öryggisvandamál.
Núverandi Supabase API-lykla leiðbeiningar eru skýrar:
Publishable lykill: ætlaður fyrir opinbera hluti eins og vafra og farsímaforrit.
Leyndar lykill: ætlaður einungis fyrir bakenda hluti sem þú stjórnar; hann fer framhjá Row Level Security.
Ef leyndar lykill hefur verið birtur í upprunakóða, opinberum bundle, skjámynd eða repository, fjarlægðu eða snúðu honum í gegnum Supabase API Keys stillingar í stað þess að aðeins endurnefna umhverfisbreytuna.
Algeng einkenni og hraðasta athugunin
Einkenni
Líklegasta staðurinn til að leita
supabaseKey is required. strax við ræsingu
Annað argumentið við createClient() er tómt eða undefined
Next.js virkar á þjóni en lykill er undefined í Client Component
Vantar NEXT_PUBLIC_ forskeyti, rangt heiti, eða vantar byggingartímagildi
Vite sýnir undefined
Vantar VITE_ forskeyti eða notkun process.env í stað import.meta.env
Virkar staðbundið, mistekst í framleiðslu
Hýsingar umhverfisbreytur, Production/Preview umfang, eða vantar endurbyggingu/endurútfærslu
Virkar með ANON_KEY, brotnaði eftir yfirsöfnun
Kóði og env skrá nota ólík gömul/ný breytuheiti
Edge Function finnur ekki SUPABASE_SECRET_KEY
Núverandi Edge Function sjálfgefin nota SUPABASE_SECRET_KEYS sem JSON orðabók
TypeScript þýðir eftir að ! er bætt við en keyrsla mistekst samt
Fullyrðingin breytti aðeins tegundinni; umhverfisgildið vantar ennþá
Loka sjálfpróf: Staðfestu stillingarnar í réttri röð
Áður en þú lýsir málinu leystu, keyrðu þessa athugunarlista:
Staðfestu að Supabase Project URL komi frá verkefninu sem þú ætlar raunverulega að nota.
Fyrir vafra/viðtakanda kóða, staðfestu að þú sért að nota núverandi publishable lykil eða enn virkan eldri anon lykil—ekki leyndar lykil.
Staðfestu að kóðinn og umhverfisskráin noti sömu breytuheiti.
Fyrir Next.js viðtakanda kóða, notaðu NEXT_PUBLIC_* og beinar process.env.VARIABLE_NAME tilvísanir.
Fyrir Vite viðtakanda kóða, notaðu VITE_* og import.meta.env.VARIABLE_NAME.
Haltu .env.local í rót forritsins frekar en inni í /src.
Endurræstu þróunarþjóninn eftir að hafa breytt umhverfisskrám.
Fyrir framleiðslu, stilltu gildin í rétta útfærsluumhverfið og endurbyggðu/endurútfærðu.
Ekki skrá eða birta sb_secret_... lykla.
Fjarlægðu tímabundna villuleitar logga þegar stillingarnar eru staðfestar.
Þegar createClient() frumstillist án vantar lykil villu, er umhverfisbreytu vandamálið leyst. Ef næsta Supabase beiðni skilar auðkenningar, Row Level Security, eða töfluheimildavillu, meðhöndlaðu það sem sérstakt mál. Gildur API-lykill tryggir ekki að kallandinn megi lesa eða breyta hverri röð; Supabase aðskilur meðvitað API-lykla auðkenningu frá notandaauðkenningu og gagnagrunnsheimildum.
Varanlega lagningin er ekki “endurnefna lykilinn þar til hann virkar.” Hún er að samræma fjóra hluti: núverandi Supabase lyklagerð, umhverfisbreytuheitið, birtureglur rammaverksins, og umhverfið þar sem appið er raunverulega byggt eða keyrt. Þegar þessir hlutir passa saman, fær Supabase viðtakandinn raunverulegan lykil í stað undefined, og villandi stillingaloopinn endar.