[{"data":1,"prerenderedAt":569},["ShallowReactive",2],{"page-\u002Fsupabase\u002Fdecouvrir-supabase":3,"pieces-supabase":527,"autour-\u002Fsupabase\u002Fdecouvrir-supabase":550,"prerequis-\u002Fsupabase\u002Fdecouvrir-supabase":555,"plan-supabase":558},{"id":4,"title":5,"body":6,"description":496,"extension":497,"ligne":498,"meta":499,"motsCles":500,"navigation":506,"niveau":507,"path":508,"prerequis":509,"ressources":511,"seo":519,"sources":520,"stem":525,"__hash__":526},"docs\u002Fsupabase\u002F01.decouvrir-supabase.md","Découvrir Supabase",{"type":7,"value":8,"toc":486},"minimark",[9,14,32,36,40,51,62,66,69,121,124,128,146,152,156,162,211,214,320,330,333,337,344,412,427,438,442,445,452,455,459,482],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,29],"ul",{},[18,19,20],"li",{},"Ce que Supabase apporte à un site : une base de données et un accès prêt à l'emploi.",[18,22,23,24,28],{},"Créer un projet et une table ",[25,26,27],"code",{},"recettes"," depuis le tableau de bord.",[18,30,31],{},"Distinguer la clé publique (publishable) de la clé secrète, qui ne doit jamais sortir du serveur.",[10,33,35],{"id":34},"un-backend-déjà-installé","Un backend déjà installé",[37,38,39],"p",{},"Un site de recettes doit garder ses recettes quelque part. Il faut une base de données, un moyen d'y accéder et une gestion des comptes.",[37,41,42,46,47,50],{},[43,44,45],"strong",{},"Supabase"," est un service qui fournit tout cela. Sa base est ",[43,48,49],{},"PostgreSQL",", la même que dans le cours SQL, hébergée chez Supabase.",[37,52,53,54,57,58,61],{},"Tu ne codes pas de serveur pour lire ou écrire des lignes. Supabase expose la base par une ",[43,55,56],{},"API"," (une porte d'accès par Internet) et un client JavaScript, ",[25,59,60],{},"supabase-js",", qui l'utilise pour toi.",[10,63,65],{"id":64},"ce-que-contient-un-projet","Ce que contient un projet",[37,67,68],{},"Un projet Supabase regroupe plusieurs services :",[70,71,72,85],"table",{},[73,74,75],"thead",{},[76,77,78,82],"tr",{},[79,80,81],"th",{},"Service",[79,83,84],{},"Rôle",[86,87,88,97,105,113],"tbody",{},[76,89,90,94],{},[91,92,93],"td",{},"Base de données",[91,95,96],{},"Tes tables PostgreSQL.",[76,98,99,102],{},[91,100,101],{},"Authentification",[91,103,104],{},"Inscription, connexion, sessions.",[76,106,107,110],{},[91,108,109],{},"Stockage",[91,111,112],{},"Photos et fichiers.",[76,114,115,118],{},[91,116,117],{},"Temps réel",[91,119,120],{},"Recevoir les changements de la base en direct.",[37,122,123],{},"Ce cours-ci s'occupe de la base. Les autres services arrivent dans la suite de la ligne.",[10,125,127],{"id":126},"créer-un-projet","Créer un projet",[129,130,131,134,137,143],"ol",{},[18,132,133],{},"Crée un compte sur supabase.com.",[18,135,136],{},"Dans le tableau de bord, crée un nouveau projet dans ton organisation.",[18,138,139,140,142],{},"Donne-lui un nom, par exemple ",[25,141,27],{},", choisis un mot de passe pour la base et une région proche de tes visiteurs.",[18,144,145],{},"Attends la fin de la création.",[147,148,149],"warning",{},[37,150,151],{},"Le mot de passe de la base est un secret. Garde-le dans un gestionnaire de mots de passe, jamais dans un fichier du dépôt.",[10,153,155],{"id":154},"créer-une-table-dans-léditeur","Créer une table dans l'éditeur",[37,157,158,159,161],{},"La table ",[25,160,27],{}," se crée sans écrire de SQL :",[129,163,164,171,180,191,208],{},[18,165,166,167,170],{},"Ouvre ",[43,168,169],{},"Table Editor",".",[18,172,173,174,177,178,170],{},"Clique sur ",[43,175,176],{},"New table"," et nomme-la ",[25,179,27],{},[18,181,182,183,186,187,190],{},"Garde les colonnes ",[25,184,185],{},"id"," et ",[25,188,189],{},"created_at"," créées par l'éditeur.",[18,192,193,194,197,198,201,202,197,205,170],{},"Ajoute une colonne ",[25,195,196],{},"titre"," de type ",[25,199,200],{},"text"," et une colonne ",[25,203,204],{},"duree_minutes",[25,206,207],{},"int8",[18,209,210],{},"Enregistre.",[37,212,213],{},"Le même résultat s'obtient en SQL :",[215,216,221],"pre",{"className":217,"code":218,"language":219,"meta":220,"style":220},"language-sql shiki shiki-themes github-light-default github-dark-default github-dark-default","create table recettes (\n  id bigint generated by default as identity primary key,\n  titre text not null,\n  duree_minutes int,\n  created_at timestamptz default now()\n);\n","sql","",[25,222,223,243,273,286,297,314],{"__ignoreMap":220},[224,225,228,232,235,239],"span",{"class":226,"line":227},"line",1,[224,229,231],{"class":230},"sOnC1","create",[224,233,234],{"class":230}," table",[224,236,238],{"class":237},"syCW7"," recettes",[224,240,242],{"class":241},"scfrF"," (\n",[224,244,246,249,252,255,258,261,264,267,270],{"class":226,"line":245},2,[224,247,248],{"class":241},"  id ",[224,250,251],{"class":230},"bigint",[224,253,254],{"class":230}," generated",[224,256,257],{"class":230}," by",[224,259,260],{"class":230}," default",[224,262,263],{"class":230}," as",[224,265,266],{"class":230}," identity",[224,268,269],{"class":230}," primary key",[224,271,272],{"class":241},",\n",[224,274,276,279,281,284],{"class":226,"line":275},3,[224,277,278],{"class":241},"  titre ",[224,280,200],{"class":230},[224,282,283],{"class":230}," not null",[224,285,272],{"class":241},[224,287,289,292,295],{"class":226,"line":288},4,[224,290,291],{"class":241},"  duree_minutes ",[224,293,294],{"class":230},"int",[224,296,272],{"class":241},[224,298,300,303,306,308,311],{"class":226,"line":299},5,[224,301,302],{"class":241},"  created_at ",[224,304,305],{"class":230},"timestamptz",[224,307,260],{"class":230},[224,309,310],{"class":230}," now",[224,312,313],{"class":241},"()\n",[224,315,317],{"class":226,"line":316},6,[224,318,319],{"class":241},");\n",[37,321,322,323,325,326,329],{},"La colonne ",[25,324,185],{}," utilise ",[25,327,328],{},"generated by default as identity"," : PostgreSQL numérote chaque ligne tout seul.",[37,331,332],{},"Ajoute ensuite deux recettes à la main dans l'éditeur pour avoir des données de test.",[10,334,336],{"id":335},"deux-types-de-clés","Deux types de clés",[37,338,339,340,343],{},"Pour parler à ton projet, un programme présente une ",[43,341,342],{},"clé d'API",". Supabase en propose deux types :",[70,345,346,358],{},[73,347,348],{},[76,349,350,352,355],{},[79,351],{},[79,353,354],{},"Clé publishable",[79,356,357],{},"Clé secrète",[86,359,360,375,390,401],{},[76,361,362,365,370],{},[91,363,364],{},"Préfixe",[91,366,367],{},[25,368,369],{},"sb_publishable_",[91,371,372],{},[25,373,374],{},"sb_secret_",[76,376,377,380,385],{},[91,378,379],{},"Ancien nom",[91,381,382],{},[25,383,384],{},"anon",[91,386,387],{},[25,388,389],{},"service_role",[76,391,392,395,398],{},[91,393,394],{},"Dans le navigateur",[91,396,397],{},"Oui, elle est faite pour être publique",[91,399,400],{},"Non, jamais",[76,402,403,406,409],{},[91,404,405],{},"Droits",[91,407,408],{},"Limités par les règles de la base",[91,410,411],{},"Contourne ces règles",[37,413,414,415,418,419,422,423,426],{},"Tu les trouves dans ",[43,416,417],{},"Settings",", puis ",[43,420,421],{},"API Keys",". Le dialogue ",[43,424,425],{},"Connect"," affiche l'adresse du projet et la clé publishable.",[428,429,430],"note",{},[37,431,432,433,186,435,437],{},"Supabase remplace les anciennes clés ",[25,434,384],{},[25,436,389],{}," par ces deux-là d'ici la fin de 2026. Tu croiseras encore les anciens noms dans des tutoriels.",[10,439,441],{"id":440},"pourquoi-la-clé-publique-est-sans-danger","Pourquoi la clé publique est sans danger",[37,443,444],{},"Le site que tu publies contient la clé publishable : n'importe qui peut la lire dans le navigateur. Elle est sans danger seulement si la base se protège elle-même.",[37,446,447,448,451],{},"Cette protection s'appelle ",[43,449,450],{},"Row Level Security"," (RLS), la sécurité au niveau des lignes. Elle décide qui peut lire ou modifier chaque ligne. Le cours 05 lui est consacré.",[37,453,454],{},"Retiens déjà la règle : une table exposée sans RLS est lisible et modifiable par tout le monde. L'éditeur du tableau de bord l'active à la création d'une table. Une table créée en SQL n'a pas cette protection tant que tu ne l'actives pas.",[10,456,458],{"id":457},"à-retenir","À retenir",[15,460,461,464,467,473,479],{},[18,462,463],{},"Supabase fournit une base PostgreSQL, des comptes, du stockage et du temps réel.",[18,465,466],{},"Un projet se crée depuis le tableau de bord, une table depuis le Table Editor ou en SQL.",[18,468,469,470,472],{},"La clé publishable (",[25,471,369],{},") peut aller dans le navigateur.",[18,474,475,476,478],{},"La clé secrète (",[25,477,374],{},") contourne toute protection : serveur uniquement, jamais dans Git.",[18,480,481],{},"La clé publique n'est sûre que si la RLS est activée sur chaque table exposée.",[483,484,485],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":220,"searchDepth":245,"depth":275,"links":487},[488,489,490,491,492,493,494,495],{"id":12,"depth":245,"text":13},{"id":34,"depth":245,"text":35},{"id":64,"depth":245,"text":65},{"id":126,"depth":245,"text":127},{"id":154,"depth":245,"text":155},{"id":335,"depth":245,"text":336},{"id":440,"depth":245,"text":441},{"id":457,"depth":245,"text":458},"Ce qu'est Supabase, comment créer un projet et une première table de recettes, et quelle clé peut être publique.","md","supabase",{},[45,501,49,502,169,503,504,505],"backend","projet Supabase","clé publishable","clé secrète","API REST",true,"debutant","\u002Fsupabase\u002Fdecouvrir-supabase",[510],"\u002Fsql\u002Fbase-relationnelle",[512,516],{"nom":513,"url":514,"type":515,"anglais":506},"Supabase, clés d'API (en anglais)","https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fapi\u002Fapi-keys","doc",{"nom":517,"url":518,"type":515,"anglais":506},"Supabase, créer des tables (en anglais)","https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdatabase\u002Ftables",{"title":5,"description":496},[521,524],{"nom":522,"url":523},"Documentation de Supabase (en anglais)","https:\u002F\u002Fsupabase.com\u002Fdocs",{"nom":513,"url":514},"supabase\u002F01.decouvrir-supabase","E1dz5VBMny8_c7vj7LozQ7cahQ227U9NDfOWeOZ53fI",[528,529,533,537,540,543,547],{"path":508,"title":5,"stem":525},{"path":530,"title":531,"stem":532},"\u002Fsupabase\u002Fbrancher-a-nuxt","Brancher Supabase à Nuxt","supabase\u002F02.brancher-a-nuxt",{"path":534,"title":535,"stem":536},"\u002Fsupabase\u002Flire-et-ecrire","Lire et écrire des données","supabase\u002F03.lire-et-ecrire",{"path":538,"title":101,"stem":539},"\u002Fsupabase\u002Fauthentification","supabase\u002F04.authentification",{"path":541,"title":450,"stem":542},"\u002Fsupabase\u002Frow-level-security","supabase\u002F05.row-level-security",{"path":544,"title":545,"stem":546},"\u002Fsupabase\u002Fstockage-et-temps-reel","Stockage et temps réel","supabase\u002F06.stockage-et-temps-reel",{"path":548,"title":45,"stem":549},"\u002Fsupabase","supabase\u002Findex",[551,553],{"title":45,"path":548,"stem":549,"description":552,"children":-1},"Le mémo de Supabase avec Nuxt : clés, configuration, requêtes, authentification, RLS, stockage et temps réel.",{"title":531,"path":530,"stem":532,"description":554,"children":-1},"Installer le module @nuxtjs\u002Fsupabase, renseigner les variables d'environnement et savoir quelle clé va où.",[556],{"path":510,"title":557,"ligne":219},"La base relationnelle et SELECT",[559,560,561,562,564,565,567],{"path":508,"title":5,"niveau":507,"stem":525},{"path":530,"title":531,"niveau":507,"stem":532},{"path":534,"title":535,"niveau":507,"stem":536},{"path":538,"title":101,"niveau":563,"stem":539},"intermediaire",{"path":541,"title":450,"niveau":563,"stem":542},{"path":544,"title":545,"niveau":566,"stem":546},"avance",{"path":548,"title":45,"niveau":568,"stem":549},"memo",1794583460352]