[{"data":1,"prerenderedAt":1214},["ShallowReactive",2],{"navigation_docs":3,"-playbooks-auth-nuxt-auth-utils":80,"-playbooks-auth-nuxt-auth-utils-surround":1209},[4,20,45],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"icon":6,"path":22,"stem":23,"children":24,"page":6},"Guide","\u002Fguide","2.guide",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Configuration","\u002Fguide\u002Fconfiguration","2.guide\u002F1.configuration","i-lucide-settings",{"title":31,"path":32,"stem":33,"icon":34},"Composables","\u002Fguide\u002Fcomposables","2.guide\u002F2.composables","i-lucide-code",{"title":36,"path":37,"stem":38,"icon":39},"Authentication","\u002Fguide\u002Fauthentication","2.guide\u002F3.authentication","i-lucide-key-round",{"title":41,"path":42,"stem":43,"icon":44},"Types","\u002Fguide\u002Ftypes","2.guide\u002F4.types","i-lucide-braces",{"title":46,"icon":6,"path":47,"stem":48,"children":49,"page":6},"Playbooks","\u002Fplaybooks","3.playbooks",[50,55,60,65,70,75],{"title":51,"path":52,"stem":53,"icon":54},"Local Postgres & PostgREST","\u002Fplaybooks\u002Flocal-postgrest","3.playbooks\u002F1.local-postgrest","i-simple-icons-docker",{"title":56,"path":57,"stem":58,"icon":59},"Coming from Supabase","\u002Fplaybooks\u002Fcoming-from-supabase","3.playbooks\u002F2.coming-from-supabase","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Auth with nuxt-auth-utils","\u002Fplaybooks\u002Fauth-nuxt-auth-utils","3.playbooks\u002F3.auth-nuxt-auth-utils","i-lucide-key",{"title":66,"path":67,"stem":68,"icon":69},"Auth with Better Auth","\u002Fplaybooks\u002Fauth-better-auth","3.playbooks\u002F4.auth-better-auth","i-lucide-shield",{"title":71,"path":72,"stem":73,"icon":74},"Auth with Sidebase Nuxt Auth","\u002Fplaybooks\u002Fauth-sidebase","3.playbooks\u002F5.auth-sidebase","i-lucide-user-round-check",{"title":76,"path":77,"stem":78,"icon":79},"Auth with Clerk","\u002Fplaybooks\u002Fauth-clerk","3.playbooks\u002F6.auth-clerk","i-lucide-circle-user-round",{"id":81,"title":61,"body":82,"description":1202,"extension":1203,"links":1204,"meta":1205,"navigation":1206,"path":62,"seo":1207,"stem":63,"__hash__":1208},"docs\u002F3.playbooks\u002F3.auth-nuxt-auth-utils.md",{"type":83,"value":84,"toc":1195},"minimark",[85,99,106,111,114,274,308,312,575,585,761,765,837,841,848,1144,1159,1163,1191],[86,87,88,98],"p",{},[89,90,94],"a",{"href":91,"rel":92},"https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",[93],"nofollow",[95,96,97],"code",{},"nuxt-auth-utils"," keeps the session in a sealed cookie and you own the sign-in route, so this is the simplest setup: mint the PostgREST token in the same route that creates the session.",[100,101,102,103,105],"note",{},"Steps 1 to 4 (credentials sign-in, sign-out and querying) are what the module's playground runs. The OAuth example in step 2 follows the ",[95,104,97],{}," docs but isn't part of the playground.",[107,108,110],"h2",{"id":109},"_1-configure-the-session-and-the-jwt-secret","1. Configure the session and the JWT secret",[86,112,113],{},"Give the session a lifetime and use the same value for the token, so they end together:",[115,116,122],"pre",{"className":117,"code":118,"filename":119,"language":120,"meta":121,"style":121},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['nuxt-auth-utils', 'nuxt-postgrest'],\n  runtimeConfig: {\n    public: { postgrestUrl: 'http:\u002F\u002Flocalhost:3001' },\n    session: { maxAge: 60 * 60 * 24 }, \u002F\u002F 1 day, in seconds\n  },\n})\n","nuxt.config.ts","ts","",[95,123,124,148,186,197,223,259,265],{"__ignoreMap":121},[125,126,129,133,136,140,144],"span",{"class":127,"line":128},"line",1,[125,130,132],{"class":131},"s7zQu","export",[125,134,135],{"class":131}," default",[125,137,139],{"class":138},"s2Zo4"," defineNuxtConfig",[125,141,143],{"class":142},"sTEyZ","(",[125,145,147],{"class":146},"sMK4o","{\n",[125,149,151,155,158,161,164,167,169,172,175,178,180,183],{"class":127,"line":150},2,[125,152,154],{"class":153},"swJcz","  modules",[125,156,157],{"class":146},":",[125,159,160],{"class":142}," [",[125,162,163],{"class":146},"'",[125,165,97],{"class":166},"sfazB",[125,168,163],{"class":146},[125,170,171],{"class":146},",",[125,173,174],{"class":146}," '",[125,176,177],{"class":166},"nuxt-postgrest",[125,179,163],{"class":146},[125,181,182],{"class":142},"]",[125,184,185],{"class":146},",\n",[125,187,189,192,194],{"class":127,"line":188},3,[125,190,191],{"class":153},"  runtimeConfig",[125,193,157],{"class":146},[125,195,196],{"class":146}," {\n",[125,198,200,203,205,208,211,213,215,218,220],{"class":127,"line":199},4,[125,201,202],{"class":153},"    public",[125,204,157],{"class":146},[125,206,207],{"class":146}," {",[125,209,210],{"class":153}," postgrestUrl",[125,212,157],{"class":146},[125,214,174],{"class":146},[125,216,217],{"class":166},"http:\u002F\u002Flocalhost:3001",[125,219,163],{"class":146},[125,221,222],{"class":146}," },\n",[125,224,226,229,231,233,236,238,242,245,247,249,252,255],{"class":127,"line":225},5,[125,227,228],{"class":153},"    session",[125,230,157],{"class":146},[125,232,207],{"class":146},[125,234,235],{"class":153}," maxAge",[125,237,157],{"class":146},[125,239,241],{"class":240},"sbssI"," 60",[125,243,244],{"class":146}," *",[125,246,241],{"class":240},[125,248,244],{"class":146},[125,250,251],{"class":240}," 24",[125,253,254],{"class":146}," },",[125,256,258],{"class":257},"sHwdD"," \u002F\u002F 1 day, in seconds\n",[125,260,262],{"class":127,"line":261},6,[125,263,264],{"class":146},"  },\n",[125,266,268,271],{"class":127,"line":267},7,[125,269,270],{"class":146},"}",[125,272,273],{"class":142},")\n",[115,275,280],{"className":276,"code":277,"filename":278,"language":279,"meta":121,"style":121},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","NUXT_SESSION_PASSWORD=a-random-string-of-at-least-32-characters\n# Must equal PostgREST's jwt-secret (PGRST_JWT_SECRET)\nNUXT_POSTGREST_JWT_SECRET=replace-with-a-secret-of-at-least-32-characters\n",".env","bash",[95,281,282,293,298],{"__ignoreMap":121},[125,283,284,287,290],{"class":127,"line":128},[125,285,286],{"class":142},"NUXT_SESSION_PASSWORD",[125,288,289],{"class":146},"=",[125,291,292],{"class":166},"a-random-string-of-at-least-32-characters\n",[125,294,295],{"class":127,"line":150},[125,296,297],{"class":257},"# Must equal PostgREST's jwt-secret (PGRST_JWT_SECRET)\n",[125,299,300,303,305],{"class":127,"line":188},[125,301,302],{"class":142},"NUXT_POSTGREST_JWT_SECRET",[125,304,289],{"class":146},[125,306,307],{"class":166},"replace-with-a-secret-of-at-least-32-characters\n",[107,309,311],{"id":310},"_2-mint-the-token-when-the-user-signs-in","2. Mint the token when the user signs in",[115,313,316],{"className":117,"code":314,"filename":315,"language":120,"meta":121,"style":121},"export default defineEventHandler(async (event) => {\n  const user = await verifyCredentials(event) \u002F\u002F your own check\n\n  await setUserSession(event, { user: { id: user.id, name: user.name } })\n\n  const token = await mintJwt(\n    { role: 'authenticated', sub: user.id },\n    { expiresIn: useRuntimeConfig(event).session.maxAge },\n  )\n  setPostgrestToken(event, token)\n\n  return { ok: true }\n})\n","server\u002Fapi\u002Flogin.post.ts",[95,317,318,348,375,381,437,441,458,490,521,527,543,548,568],{"__ignoreMap":121},[125,319,320,322,324,327,329,333,336,340,343,346],{"class":127,"line":128},[125,321,132],{"class":131},[125,323,135],{"class":131},[125,325,326],{"class":138}," defineEventHandler",[125,328,143],{"class":142},[125,330,332],{"class":331},"spNyl","async",[125,334,335],{"class":146}," (",[125,337,339],{"class":338},"sHdIc","event",[125,341,342],{"class":146},")",[125,344,345],{"class":331}," =>",[125,347,196],{"class":146},[125,349,350,353,356,359,362,365,367,369,372],{"class":127,"line":150},[125,351,352],{"class":331},"  const",[125,354,355],{"class":142}," user",[125,357,358],{"class":146}," =",[125,360,361],{"class":131}," await",[125,363,364],{"class":138}," verifyCredentials",[125,366,143],{"class":153},[125,368,339],{"class":142},[125,370,371],{"class":153},") ",[125,373,374],{"class":257},"\u002F\u002F your own check\n",[125,376,377],{"class":127,"line":188},[125,378,380],{"emptyLinePlaceholder":379},true,"\n",[125,382,383,386,389,391,393,395,397,399,401,403,406,408,410,413,416,418,421,423,425,427,430,433,435],{"class":127,"line":199},[125,384,385],{"class":131},"  await",[125,387,388],{"class":138}," setUserSession",[125,390,143],{"class":153},[125,392,339],{"class":142},[125,394,171],{"class":146},[125,396,207],{"class":146},[125,398,355],{"class":153},[125,400,157],{"class":146},[125,402,207],{"class":146},[125,404,405],{"class":153}," id",[125,407,157],{"class":146},[125,409,355],{"class":142},[125,411,412],{"class":146},".",[125,414,415],{"class":142},"id",[125,417,171],{"class":146},[125,419,420],{"class":153}," name",[125,422,157],{"class":146},[125,424,355],{"class":142},[125,426,412],{"class":146},[125,428,429],{"class":142},"name",[125,431,432],{"class":146}," }",[125,434,432],{"class":146},[125,436,273],{"class":153},[125,438,439],{"class":127,"line":225},[125,440,380],{"emptyLinePlaceholder":379},[125,442,443,445,448,450,452,455],{"class":127,"line":261},[125,444,352],{"class":331},[125,446,447],{"class":142}," token",[125,449,358],{"class":146},[125,451,361],{"class":131},[125,453,454],{"class":138}," mintJwt",[125,456,457],{"class":153},"(\n",[125,459,460,463,466,468,470,473,475,477,480,482,484,486,488],{"class":127,"line":267},[125,461,462],{"class":146},"    {",[125,464,465],{"class":153}," role",[125,467,157],{"class":146},[125,469,174],{"class":146},[125,471,472],{"class":166},"authenticated",[125,474,163],{"class":146},[125,476,171],{"class":146},[125,478,479],{"class":153}," sub",[125,481,157],{"class":146},[125,483,355],{"class":142},[125,485,412],{"class":146},[125,487,415],{"class":142},[125,489,222],{"class":146},[125,491,493,495,498,500,503,505,507,509,511,514,516,519],{"class":127,"line":492},8,[125,494,462],{"class":146},[125,496,497],{"class":153}," expiresIn",[125,499,157],{"class":146},[125,501,502],{"class":138}," useRuntimeConfig",[125,504,143],{"class":153},[125,506,339],{"class":142},[125,508,342],{"class":153},[125,510,412],{"class":146},[125,512,513],{"class":142},"session",[125,515,412],{"class":146},[125,517,518],{"class":142},"maxAge",[125,520,222],{"class":146},[125,522,524],{"class":127,"line":523},9,[125,525,526],{"class":153},"  )\n",[125,528,530,533,535,537,539,541],{"class":127,"line":529},10,[125,531,532],{"class":138},"  setPostgrestToken",[125,534,143],{"class":153},[125,536,339],{"class":142},[125,538,171],{"class":146},[125,540,447],{"class":142},[125,542,273],{"class":153},[125,544,546],{"class":127,"line":545},11,[125,547,380],{"emptyLinePlaceholder":379},[125,549,551,554,556,559,561,565],{"class":127,"line":550},12,[125,552,553],{"class":131},"  return",[125,555,207],{"class":146},[125,557,558],{"class":153}," ok",[125,560,157],{"class":146},[125,562,564],{"class":563},"sfNiH"," true",[125,566,567],{"class":146}," }\n",[125,569,571,573],{"class":127,"line":570},13,[125,572,270],{"class":146},[125,574,273],{"class":142},[86,576,577,578,581,582,412],{},"Signing in with an OAuth provider works the same way: do it in the handler's ",[95,579,580],{},"onSuccess",", next to ",[95,583,584],{},"setUserSession",[115,586,589],{"className":117,"code":587,"filename":588,"language":120,"meta":121,"style":121},"export default defineOAuthGitHubEventHandler({\n  async onSuccess(event, { user }) {\n    await setUserSession(event, { user })\n    setPostgrestToken(event, await mintJwt({ role: 'authenticated', sub: String(user.id) }, { expiresIn: useRuntimeConfig(event).session.maxAge }))\n    return sendRedirect(event, '\u002F')\n  },\n})\n","server\u002Froutes\u002Fauth\u002Fgithub.get.ts",[95,590,591,604,627,648,728,751,755],{"__ignoreMap":121},[125,592,593,595,597,600,602],{"class":127,"line":128},[125,594,132],{"class":131},[125,596,135],{"class":131},[125,598,599],{"class":138}," defineOAuthGitHubEventHandler",[125,601,143],{"class":142},[125,603,147],{"class":146},[125,605,606,609,612,614,616,618,620,622,625],{"class":127,"line":150},[125,607,608],{"class":331},"  async",[125,610,611],{"class":153}," onSuccess",[125,613,143],{"class":146},[125,615,339],{"class":338},[125,617,171],{"class":146},[125,619,207],{"class":146},[125,621,355],{"class":338},[125,623,624],{"class":146}," })",[125,626,196],{"class":146},[125,628,629,632,634,636,638,640,642,644,646],{"class":127,"line":188},[125,630,631],{"class":131},"    await",[125,633,388],{"class":138},[125,635,143],{"class":153},[125,637,339],{"class":142},[125,639,171],{"class":146},[125,641,207],{"class":146},[125,643,355],{"class":142},[125,645,432],{"class":146},[125,647,273],{"class":153},[125,649,650,653,655,657,659,661,663,665,668,670,672,674,676,678,680,682,684,687,689,692,694,696,698,701,703,705,707,709,711,713,715,717,719,721,723,725],{"class":127,"line":199},[125,651,652],{"class":138},"    setPostgrestToken",[125,654,143],{"class":153},[125,656,339],{"class":142},[125,658,171],{"class":146},[125,660,361],{"class":131},[125,662,454],{"class":138},[125,664,143],{"class":153},[125,666,667],{"class":146},"{",[125,669,465],{"class":153},[125,671,157],{"class":146},[125,673,174],{"class":146},[125,675,472],{"class":166},[125,677,163],{"class":146},[125,679,171],{"class":146},[125,681,479],{"class":153},[125,683,157],{"class":146},[125,685,686],{"class":138}," String",[125,688,143],{"class":153},[125,690,691],{"class":142},"user",[125,693,412],{"class":146},[125,695,415],{"class":142},[125,697,371],{"class":153},[125,699,700],{"class":146},"},",[125,702,207],{"class":146},[125,704,497],{"class":153},[125,706,157],{"class":146},[125,708,502],{"class":138},[125,710,143],{"class":153},[125,712,339],{"class":142},[125,714,342],{"class":153},[125,716,412],{"class":146},[125,718,513],{"class":142},[125,720,412],{"class":146},[125,722,518],{"class":142},[125,724,432],{"class":146},[125,726,727],{"class":153},"))\n",[125,729,730,733,736,738,740,742,744,747,749],{"class":127,"line":225},[125,731,732],{"class":131},"    return",[125,734,735],{"class":138}," sendRedirect",[125,737,143],{"class":153},[125,739,339],{"class":142},[125,741,171],{"class":146},[125,743,174],{"class":146},[125,745,746],{"class":166},"\u002F",[125,748,163],{"class":146},[125,750,273],{"class":153},[125,752,753],{"class":127,"line":261},[125,754,264],{"class":146},[125,756,757,759],{"class":127,"line":267},[125,758,270],{"class":146},[125,760,273],{"class":142},[107,762,764],{"id":763},"_3-clear-it-when-the-user-signs-out","3. Clear it when the user signs out",[115,766,769],{"className":117,"code":767,"filename":768,"language":120,"meta":121,"style":121},"export default defineEventHandler(async (event) => {\n  await clearUserSession(event)\n  clearPostgrestToken(event)\n  return { ok: true }\n})\n","server\u002Fapi\u002Flogout.post.ts",[95,770,771,793,806,817,831],{"__ignoreMap":121},[125,772,773,775,777,779,781,783,785,787,789,791],{"class":127,"line":128},[125,774,132],{"class":131},[125,776,135],{"class":131},[125,778,326],{"class":138},[125,780,143],{"class":142},[125,782,332],{"class":331},[125,784,335],{"class":146},[125,786,339],{"class":338},[125,788,342],{"class":146},[125,790,345],{"class":331},[125,792,196],{"class":146},[125,794,795,797,800,802,804],{"class":127,"line":150},[125,796,385],{"class":131},[125,798,799],{"class":138}," clearUserSession",[125,801,143],{"class":153},[125,803,339],{"class":142},[125,805,273],{"class":153},[125,807,808,811,813,815],{"class":127,"line":188},[125,809,810],{"class":138},"  clearPostgrestToken",[125,812,143],{"class":153},[125,814,339],{"class":142},[125,816,273],{"class":153},[125,818,819,821,823,825,827,829],{"class":127,"line":199},[125,820,553],{"class":131},[125,822,207],{"class":146},[125,824,558],{"class":153},[125,826,157],{"class":146},[125,828,564],{"class":563},[125,830,567],{"class":146},[125,832,833,835],{"class":127,"line":225},[125,834,270],{"class":146},[125,836,273],{"class":142},[107,838,840],{"id":839},"_4-query-as-the-user","4. Query as the user",[86,842,843,844,847],{},"Nothing special is needed. After signing in, ",[95,845,846],{},"usePostgrest()"," sends the token, including after client-side navigation:",[115,849,854],{"className":850,"code":851,"filename":852,"language":853,"meta":121,"style":121},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst { loggedIn, fetch: refreshSession } = useUserSession()\n\nconst { data: todos, refresh } = await useAsyncData('todos', async () => {\n  const { data, error } = await usePostgrest().from('todos').select('*')\n  if (error) throw error\n  return data\n})\n\nasync function login() {\n  await $fetch('\u002Fapi\u002Flogin', { method: 'POST' })\n  await refreshSession()\n  await refresh() \u002F\u002F run the query again, now as the user\n}\n\u003C\u002Fscript>\n","app\u002Fpages\u002Ftodos.vue","vue",[95,855,856,882,912,916,965,1021,1039,1046,1052,1056,1070,1106,1115,1128,1134],{"__ignoreMap":121},[125,857,858,861,864,867,870,872,875,877,879],{"class":127,"line":128},[125,859,860],{"class":146},"\u003C",[125,862,863],{"class":153},"script",[125,865,866],{"class":331}," setup",[125,868,869],{"class":331}," lang",[125,871,289],{"class":146},[125,873,874],{"class":146},"\"",[125,876,120],{"class":166},[125,878,874],{"class":146},[125,880,881],{"class":146},">\n",[125,883,884,887,889,892,894,897,899,902,904,906,909],{"class":127,"line":150},[125,885,886],{"class":331},"const",[125,888,207],{"class":146},[125,890,891],{"class":142}," loggedIn",[125,893,171],{"class":146},[125,895,896],{"class":153}," fetch",[125,898,157],{"class":146},[125,900,901],{"class":142}," refreshSession ",[125,903,270],{"class":146},[125,905,358],{"class":146},[125,907,908],{"class":138}," useUserSession",[125,910,911],{"class":142},"()\n",[125,913,914],{"class":127,"line":188},[125,915,380],{"emptyLinePlaceholder":379},[125,917,918,920,922,925,927,930,932,935,937,939,941,944,946,948,951,953,955,958,961,963],{"class":127,"line":199},[125,919,886],{"class":331},[125,921,207],{"class":146},[125,923,924],{"class":153}," data",[125,926,157],{"class":146},[125,928,929],{"class":142}," todos",[125,931,171],{"class":146},[125,933,934],{"class":142}," refresh ",[125,936,270],{"class":146},[125,938,358],{"class":146},[125,940,361],{"class":131},[125,942,943],{"class":138}," useAsyncData",[125,945,143],{"class":142},[125,947,163],{"class":146},[125,949,950],{"class":166},"todos",[125,952,163],{"class":146},[125,954,171],{"class":146},[125,956,957],{"class":331}," async",[125,959,960],{"class":146}," ()",[125,962,345],{"class":331},[125,964,196],{"class":146},[125,966,967,969,971,973,975,978,980,982,984,987,990,992,995,997,999,1001,1003,1005,1007,1010,1012,1014,1017,1019],{"class":127,"line":225},[125,968,352],{"class":331},[125,970,207],{"class":146},[125,972,924],{"class":142},[125,974,171],{"class":146},[125,976,977],{"class":142}," error",[125,979,432],{"class":146},[125,981,358],{"class":146},[125,983,361],{"class":131},[125,985,986],{"class":138}," usePostgrest",[125,988,989],{"class":153},"()",[125,991,412],{"class":146},[125,993,994],{"class":138},"from",[125,996,143],{"class":153},[125,998,163],{"class":146},[125,1000,950],{"class":166},[125,1002,163],{"class":146},[125,1004,342],{"class":153},[125,1006,412],{"class":146},[125,1008,1009],{"class":138},"select",[125,1011,143],{"class":153},[125,1013,163],{"class":146},[125,1015,1016],{"class":166},"*",[125,1018,163],{"class":146},[125,1020,273],{"class":153},[125,1022,1023,1026,1028,1031,1033,1036],{"class":127,"line":261},[125,1024,1025],{"class":131},"  if",[125,1027,335],{"class":153},[125,1029,1030],{"class":142},"error",[125,1032,371],{"class":153},[125,1034,1035],{"class":131},"throw",[125,1037,1038],{"class":142}," error\n",[125,1040,1041,1043],{"class":127,"line":267},[125,1042,553],{"class":131},[125,1044,1045],{"class":142}," data\n",[125,1047,1048,1050],{"class":127,"line":492},[125,1049,270],{"class":146},[125,1051,273],{"class":142},[125,1053,1054],{"class":127,"line":523},[125,1055,380],{"emptyLinePlaceholder":379},[125,1057,1058,1060,1063,1066,1068],{"class":127,"line":529},[125,1059,332],{"class":331},[125,1061,1062],{"class":331}," function",[125,1064,1065],{"class":138}," login",[125,1067,989],{"class":146},[125,1069,196],{"class":146},[125,1071,1072,1074,1077,1079,1081,1084,1086,1088,1090,1093,1095,1097,1100,1102,1104],{"class":127,"line":545},[125,1073,385],{"class":131},[125,1075,1076],{"class":138}," $fetch",[125,1078,143],{"class":153},[125,1080,163],{"class":146},[125,1082,1083],{"class":166},"\u002Fapi\u002Flogin",[125,1085,163],{"class":146},[125,1087,171],{"class":146},[125,1089,207],{"class":146},[125,1091,1092],{"class":153}," method",[125,1094,157],{"class":146},[125,1096,174],{"class":146},[125,1098,1099],{"class":166},"POST",[125,1101,163],{"class":146},[125,1103,432],{"class":146},[125,1105,273],{"class":153},[125,1107,1108,1110,1113],{"class":127,"line":550},[125,1109,385],{"class":131},[125,1111,1112],{"class":138}," refreshSession",[125,1114,911],{"class":153},[125,1116,1117,1119,1122,1125],{"class":127,"line":570},[125,1118,385],{"class":131},[125,1120,1121],{"class":138}," refresh",[125,1123,1124],{"class":153},"() ",[125,1126,1127],{"class":257},"\u002F\u002F run the query again, now as the user\n",[125,1129,1131],{"class":127,"line":1130},14,[125,1132,1133],{"class":146},"}\n",[125,1135,1137,1140,1142],{"class":127,"line":1136},15,[125,1138,1139],{"class":146},"\u003C\u002F",[125,1141,863],{"class":153},[125,1143,881],{"class":146},[86,1145,1146,1147,1150,1151,1154,1155,412],{},"In server routes, use ",[95,1148,1149],{},"usePostgrestUser(event)"," the same way. Your RLS policies see the claims you minted, so a policy like ",[95,1152,1153],{},"owner = current_setting('request.jwt.claims', true)::json ->> 'sub'"," matches the signed-in user. See ",[89,1156,1158],{"href":1157},"\u002Fguide\u002Fauthentication#reading-claims-in-rls-policies","Reading claims in RLS policies",[107,1160,1162],{"id":1161},"things-to-know","Things to know",[1164,1165,1166,1182],"ul",{},[1167,1168,1169,1173,1174,1177,1178,412],"li",{},[1170,1171,1172],"strong",{},"Fixed lifetime."," The session and the token both last ",[95,1175,1176],{},"session.maxAge",", and neither is extended while the user is active. If you refresh sessions yourself, mint a new token at the same time. See ",[89,1179,1181],{"href":1180},"\u002Fguide\u002Fauthentication#expiry","Expiry",[1167,1183,1184,1187,1188,1190],{},[1170,1185,1186],{},"Revocation."," Clearing the session doesn't invalidate a token a user already copied. Keep ",[95,1189,518],{}," as short as your app can stand.",[1192,1193,1194],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":121,"searchDepth":150,"depth":150,"links":1196},[1197,1198,1199,1200,1201],{"id":109,"depth":150,"text":110},{"id":310,"depth":150,"text":311},{"id":763,"depth":150,"text":764},{"id":839,"depth":150,"text":840},{"id":1161,"depth":150,"text":1162},"Sign users in with nuxt-auth-utils and run every PostgREST query as them.","md",null,{},{"icon":64},{"title":61,"description":1202},"RMUuCMpZjNaNPS9dwhJ-2_ZlBdccr7dL7t28Fgu5WpA",[1210,1212],{"title":56,"path":57,"stem":58,"description":1211,"icon":59,"children":-1},"Map @nuxtjs\u002Fsupabase patterns to Nuxt PostgREST.",{"title":66,"path":67,"stem":68,"description":1213,"icon":69,"children":-1},"Keep a PostgREST token in step with your Better Auth session.",1792365098928]