[{"data":1,"prerenderedAt":1321},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-sessions":152,"-core-concepts-sessions-surround":1316},[4,42,68,110,131],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","/getting-started","1.getting-started/0.index",[9,12,17,22,27,32,37],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/getting-started/installation","1.getting-started/1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","/getting-started/configuration","1.getting-started/2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","/getting-started/client-setup","1.getting-started/3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","/getting-started/type-augmentation","1.getting-started/4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","/getting-started/schema-generation","1.getting-started/5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","/getting-started/how-it-works","1.getting-started/6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","/core-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","/core-concepts/server-auth","2.core-concepts/1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","/core-concepts/sessions","2.core-concepts/2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","/core-concepts/route-protection","2.core-concepts/3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","/core-concepts/auto-imports-aliases","2.core-concepts/4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","/core-concepts/security-caveats","2.core-concepts/5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","/guides","3.guides",[73,77,81,85,89,94,98,102,106],{"title":74,"path":75,"stem":76},"Role‑Based Access","/guides/role-based-access","3.guides/1.role-based-access",{"title":78,"path":79,"stem":80},"OAuth Providers","/guides/oauth-providers","3.guides/2.oauth-providers",{"title":82,"path":83,"stem":84},"Custom Database","/guides/custom-database","3.guides/3.custom-database",{"title":86,"path":87,"stem":88},"Database-less Mode","/guides/database-less-mode","3.guides/4.database-less-mode",{"title":90,"path":91,"stem":92,"icon":93},"External Auth Backend","/guides/external-auth-backend","3.guides/5.external-auth-backend","i-lucide-server",{"title":95,"path":96,"stem":97},"Migrating from nuxt-auth-utils","/guides/migrate-from-nuxt-auth-utils","3.guides/6.migrate-from-nuxt-auth-utils",{"title":99,"path":100,"stem":101},"Two-Factor Authentication (TOTP + Backup Codes)","/guides/two-factor-auth","3.guides/7.two-factor-auth",{"title":103,"path":104,"stem":105},"Testing","/guides/testing","3.guides/8.testing",{"title":107,"path":108,"stem":109},"Production Deployment","/guides/production-deployment","3.guides/9.production-deployment",{"title":111,"path":112,"stem":113,"children":114,"page":67},"Integrations","/integrations","4.integrations",[115,119,123,127],{"title":116,"path":117,"stem":118},"NuxtHub","/integrations/nuxthub","4.integrations/1.nuxthub",{"title":120,"path":121,"stem":122},"DevTools","/integrations/devtools","4.integrations/2.devtools",{"title":124,"path":125,"stem":126},"Convex","/integrations/convex","4.integrations/3.convex",{"title":128,"path":129,"stem":130},"i18n","/integrations/i18n","4.integrations/4.i18n",{"title":132,"path":133,"stem":134,"children":135,"page":67},"API Reference","/api","5.api",[136,140,144,148],{"title":137,"path":138,"stem":139},"Composables","/api/composables","5.api/1.composables",{"title":141,"path":142,"stem":143},"Server Utilities","/api/server-utils","5.api/2.server-utils",{"title":145,"path":146,"stem":147},"Components","/api/components","5.api/3.components",{"title":149,"path":150,"stem":151},"Types","/api/types","5.api/4.types",{"id":153,"title":52,"body":154,"description":1310,"extension":1311,"links":1312,"meta":1313,"navigation":184,"path":53,"seo":1314,"stem":54,"__hash__":1315},"docs/2.core-concepts/2.sessions.md",{"type":155,"value":156,"toc":1299},"minimark",[157,228,232,325,330,333,378,381,410,521,526,533,541,604,608,618,622,629,632,698,701,769,772,776,779,783,787,950,954,957,1039,1043,1046,1154,1158,1161,1292,1295],[158,159,160],"code-collapse",{},[161,162,168],"pre",{"className":163,"code":164,"filename":165,"language":166,"meta":167,"style":167},"language-txt shiki shiki-themes one-light synthwave-84 synthwave-84","Handle sessions with @onmax/nuxt-better-auth using useUserSession().\n\n- `useUserSession()` is auto-imported and returns: user, session, loggedIn, ready, signIn, signUp, signOut, fetchSession\n- SSR: session is fetched server-side via cookies and hydrated — `ready` is `true` after hydration\n- Client: `.client` is `null` during SSR, available after hydration\n- Split model: use `useUserSession()` in pages/components, use `requireUserSession(event)` in server handlers\n- Configure session lifetime in `server/auth.config.ts` via `session.expiresIn` and `session.cookieCache`\n- Use `\u003CBetterAuthState>` or `ready` ref to avoid loading flashes\n- Force refresh: `fetchSession({ force: true })`\n","Prompt","txt","",[169,170,171,179,186,192,198,204,210,216,222],"code",{"__ignoreMap":167},[172,173,176],"span",{"class":174,"line":175},"line",1,[172,177,178],{},"Handle sessions with @onmax/nuxt-better-auth using useUserSession().\n",[172,180,182],{"class":174,"line":181},2,[172,183,185],{"emptyLinePlaceholder":184},true,"\n",[172,187,189],{"class":174,"line":188},3,[172,190,191],{},"- `useUserSession()` is auto-imported and returns: user, session, loggedIn, ready, signIn, signUp, signOut, fetchSession\n",[172,193,195],{"class":174,"line":194},4,[172,196,197],{},"- SSR: session is fetched server-side via cookies and hydrated — `ready` is `true` after hydration\n",[172,199,201],{"class":174,"line":200},5,[172,202,203],{},"- Client: `.client` is `null` during SSR, available after hydration\n",[172,205,207],{"class":174,"line":206},6,[172,208,209],{},"- Split model: use `useUserSession()` in pages/components, use `requireUserSession(event)` in server handlers\n",[172,211,213],{"class":174,"line":212},7,[172,214,215],{},"- Configure session lifetime in `server/auth.config.ts` via `session.expiresIn` and `session.cookieCache`\n",[172,217,219],{"class":174,"line":218},8,[172,220,221],{},"- Use `\u003CBetterAuthState>` or `ready` ref to avoid loading flashes\n",[172,223,225],{"class":174,"line":224},9,[172,226,227],{},"- Force refresh: `fetchSession({ force: true })`\n",[229,230,231],"p",{},"Use this page when you want to understand how session state moves between SSR, hydration, client updates, and server-side access.",[161,233,238],{"className":234,"code":235,"filename":236,"language":237,"meta":167,"style":167},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","const {\n  user,\n  session,\n  loggedIn,\n  ready,\n  signIn,\n  signUp,\n  signOut,\n  fetchSession,\n} = useUserSession()\n","pages/dashboard.vue","ts",[169,239,240,250,259,266,273,280,287,294,301,308],{"__ignoreMap":167},[172,241,242,246],{"class":174,"line":175},[172,243,245],{"class":244},"sqe1H","const",[172,247,249],{"class":248},"s17Py"," {\n",[172,251,252,256],{"class":174,"line":181},[172,253,255],{"class":254},"s6Rhl","  user",[172,257,258],{"class":248},",\n",[172,260,261,264],{"class":174,"line":188},[172,262,263],{"class":254},"  session",[172,265,258],{"class":248},[172,267,268,271],{"class":174,"line":194},[172,269,270],{"class":254},"  loggedIn",[172,272,258],{"class":248},[172,274,275,278],{"class":174,"line":200},[172,276,277],{"class":254},"  ready",[172,279,258],{"class":248},[172,281,282,285],{"class":174,"line":206},[172,283,284],{"class":254},"  signIn",[172,286,258],{"class":248},[172,288,289,292],{"class":174,"line":212},[172,290,291],{"class":254},"  signUp",[172,293,258],{"class":248},[172,295,296,299],{"class":174,"line":218},[172,297,298],{"class":254},"  signOut",[172,300,258],{"class":248},[172,302,303,306],{"class":174,"line":224},[172,304,305],{"class":254},"  fetchSession",[172,307,258],{"class":248},[172,309,311,314,318,322],{"class":174,"line":310},10,[172,312,313],{"class":248},"} ",[172,315,317],{"class":316},"sQBpM","=",[172,319,321],{"class":320},"sfT9l"," useUserSession",[172,323,324],{"class":248},"()\n",[326,327,329],"h2",{"id":328},"ssr-behavior","SSR behavior",[229,331,332],{},"During server-side rendering (SSR), the module fetches the session using incoming request cookies and populates state before rendering. A client plugin then keeps the state in sync after hydration.",[334,335,336,360,372],"ul",{},[337,338,339,343,344,347,348,351,352,355,356,359],"li",{},[340,341,342],"strong",{},"Server render:"," ",[169,345,346],{},"user"," and ",[169,349,350],{},"session"," are set when a valid session cookie exists, and ",[169,353,354],{},"ready"," is ",[169,357,358],{},"true",".",[337,361,362,343,365,355,368,371],{},[340,363,364],{},"Server runtime client access:",[169,366,367],{},"useUserSession().client",[169,369,370],{},"null"," during SSR.",[337,373,374,377],{},[340,375,376],{},"After hydration:"," State stays in sync with client-side updates.",[229,379,380],{},"Use a split model:",[334,382,383,398],{},[337,384,385,386,389,390,393,394,397],{},"In pages and components, use ",[169,387,388],{},"useUserSession()"," state and SSR-safe fetch helpers (",[169,391,392],{},"useAuthRequestFetch",", ",[169,395,396],{},"useAuthAsyncData",").",[337,399,400,401,393,404,393,407,397],{},"In server handlers and routes, use server utilities (",[169,402,403],{},"serverAuth",[169,405,406],{},"getUserSession",[169,408,409],{},"requireUserSession",[161,411,414],{"className":234,"code":412,"filename":413,"language":237,"meta":167,"style":167},"export default defineEventHandler(async (event) => {\n  const { user } = await requireUserSession(event)\n  return { id: user.id, email: user.email }\n})\n","server/api/profile.get.ts",[169,415,416,449,478,516],{"__ignoreMap":167},[172,417,418,421,425,428,431,434,437,441,444,447],{"class":174,"line":175},[172,419,420],{"class":244},"export",[172,422,424],{"class":423},"sKg8T"," default",[172,426,427],{"class":320}," defineEventHandler",[172,429,430],{"class":248},"(",[172,432,433],{"class":244},"async",[172,435,436],{"class":248}," (",[172,438,440],{"class":439},"sgisi","event",[172,442,443],{"class":248},") ",[172,445,446],{"class":244},"=>",[172,448,249],{"class":248},[172,450,451,454,457,459,462,464,467,470,472,475],{"class":174,"line":181},[172,452,453],{"class":244},"  const",[172,455,456],{"class":248}," { ",[172,458,346],{"class":254},[172,460,461],{"class":248}," } ",[172,463,317],{"class":316},[172,465,466],{"class":244}," await",[172,468,469],{"class":320}," requireUserSession",[172,471,430],{"class":248},[172,473,440],{"class":474},"sYvLG",[172,476,477],{"class":248},")\n",[172,479,480,483,485,488,492,496,498,500,502,505,507,509,511,513],{"class":174,"line":188},[172,481,482],{"class":244},"  return",[172,484,456],{"class":248},[172,486,487],{"class":474},"id",[172,489,491],{"class":490},"sVnqq",":",[172,493,495],{"class":494},"svFNh"," user",[172,497,359],{"class":248},[172,499,487],{"class":474},[172,501,393],{"class":248},[172,503,504],{"class":474},"email",[172,506,491],{"class":490},[172,508,495],{"class":494},[172,510,359],{"class":248},[172,512,504],{"class":474},[172,514,515],{"class":248}," }\n",[172,517,518],{"class":174,"line":194},[172,519,520],{"class":248},"})\n",[522,523,525],"h3",{"id":524},"optional-skip-hydrated-ssr-session-fetch","Optional: Skip Hydrated SSR Session Fetch",[229,527,528,529,532],{},"By default, SSR pages still bootstrap the client session with an initial ",[169,530,531],{},"/api/auth/get-session"," request. This enables Better Auth's session refresh behavior.",[229,534,535,536,347,538,540],{},"If you want to skip that request when ",[169,537,346],{},[169,539,350],{}," are already hydrated from SSR, enable the option below:",[161,542,545],{"className":234,"code":543,"filename":544,"language":237,"meta":167,"style":167},"export default defineNuxtConfig({\n  auth: {\n    session: {\n      skipHydratedSsrGetSession: true,\n    },\n  },\n})\n","nuxt.config.ts",[169,546,547,559,568,577,590,595,600],{"__ignoreMap":167},[172,548,549,551,553,556],{"class":174,"line":175},[172,550,420],{"class":244},[172,552,424],{"class":423},[172,554,555],{"class":320}," defineNuxtConfig",[172,557,558],{"class":248},"({\n",[172,560,561,564,566],{"class":174,"line":181},[172,562,563],{"class":474},"  auth",[172,565,491],{"class":490},[172,567,249],{"class":248},[172,569,570,573,575],{"class":174,"line":188},[172,571,572],{"class":474},"    session",[172,574,491],{"class":490},[172,576,249],{"class":248},[172,578,579,582,584,588],{"class":174,"line":194},[172,580,581],{"class":474},"      skipHydratedSsrGetSession",[172,583,491],{"class":490},[172,585,587],{"class":586},"s3ZNE"," true",[172,589,258],{"class":248},[172,591,592],{"class":174,"line":200},[172,593,594],{"class":248},"    },\n",[172,596,597],{"class":174,"line":206},[172,598,599],{"class":248},"  },\n",[172,601,602],{"class":174,"line":212},[172,603,520],{"class":248},[605,606,607],"warning",{},"When enabled, the module skips Better Auth's session refresh manager on those SSR pages (focus, polling, broadcast). Session state will still sync after auth actions that trigger a session signal.",[229,609,610,611,613,614,617],{},"For prerendered or cached pages, the client plugin fetches the session after mount. Use ",[169,612,354],{}," or ",[169,615,616],{},"\u003CBetterAuthState>"," to avoid flashes in those cases.",[326,619,621],{"id":620},"auth-readiness-vs-domain-data-readiness","Auth Readiness vs Domain Data Readiness",[229,623,624,347,626,628],{},[169,625,354],{},[169,627,616],{}," guarantee only that auth hydration has finished. They do not guarantee that additional auth-bound domain data (billing state, role membership, entitlements) has loaded.",[229,630,631],{},"When rendering UI that depends on both auth and domain data, fetch that domain data SSR-first:",[161,633,636],{"className":234,"code":634,"filename":635,"language":237,"meta":167,"style":167},"const { data: customerState } = await useFetch('/api/auth/customer/state')\nconst { data: customerById } = await useFetch('/api/auth/customer/123/state')\n","pages/app.vue",[169,637,638,670],{"__ignoreMap":167},[172,639,640,642,644,647,650,653,655,657,659,662,664,668],{"class":174,"line":175},[172,641,245],{"class":244},[172,643,456],{"class":248},[172,645,646],{"class":474},"data",[172,648,649],{"class":248},": ",[172,651,652],{"class":254},"customerState",[172,654,461],{"class":248},[172,656,317],{"class":316},[172,658,466],{"class":244},[172,660,661],{"class":320}," useFetch",[172,663,430],{"class":248},[172,665,667],{"class":666},"sPAZv","'/api/auth/customer/state'",[172,669,477],{"class":248},[172,671,672,674,676,678,680,683,685,687,689,691,693,696],{"class":174,"line":181},[172,673,245],{"class":244},[172,675,456],{"class":248},[172,677,646],{"class":474},[172,679,649],{"class":248},[172,681,682],{"class":254},"customerById",[172,684,461],{"class":248},[172,686,317],{"class":316},[172,688,466],{"class":244},[172,690,661],{"class":320},[172,692,430],{"class":248},[172,694,695],{"class":666},"'/api/auth/customer/123/state'",[172,697,477],{"class":248},[229,699,700],{},"Endpoint payloads are inferred from your Better Auth config (core + plugins), including dynamic auth paths.",[161,702,704],{"className":234,"code":703,"filename":635,"language":237,"meta":167,"style":167},"const { data: customerState, pending, error } = await useAuthAsyncData(\n  'customer-state',\n  requestFetch => requestFetch('/api/auth/customer/state'),\n)\n",[169,705,706,740,747,765],{"__ignoreMap":167},[172,707,708,710,712,714,716,718,720,723,725,728,730,732,734,737],{"class":174,"line":175},[172,709,245],{"class":244},[172,711,456],{"class":248},[172,713,646],{"class":474},[172,715,649],{"class":248},[172,717,652],{"class":254},[172,719,393],{"class":248},[172,721,722],{"class":254},"pending",[172,724,393],{"class":248},[172,726,727],{"class":254},"error",[172,729,461],{"class":248},[172,731,317],{"class":316},[172,733,466],{"class":244},[172,735,736],{"class":320}," useAuthAsyncData",[172,738,739],{"class":248},"(\n",[172,741,742,745],{"class":174,"line":181},[172,743,744],{"class":666},"  'customer-state'",[172,746,258],{"class":248},[172,748,749,752,755,758,760,762],{"class":174,"line":188},[172,750,751],{"class":439},"  requestFetch",[172,753,754],{"class":244}," =>",[172,756,757],{"class":320}," requestFetch",[172,759,430],{"class":248},[172,761,667],{"class":666},[172,763,764],{"class":248},"),\n",[172,766,767],{"class":174,"line":194},[172,768,477],{"class":248},[229,770,771],{},"This prevents first-paint UI flips where unauthenticated defaults briefly appear before domain data resolves.",[326,773,775],{"id":774},"cookie-vs-database-sessions","Cookie vs Database Sessions",[229,777,778],{},"Database sessions (default): stored in DB, revocable, visible in admin\nJWE sessions (database-less): encrypted cookie, no server storage",[780,781],"read-more",{"to":782},"https://www.better-auth.com/docs/concepts/session-management",[326,784,786],{"id":785},"handling-loading-state","Handling Loading State",[161,788,793],{"className":789,"code":790,"filename":791,"language":792,"meta":167,"style":167},"language-vue shiki shiki-themes one-light synthwave-84 synthwave-84","\u003Cscript setup lang=\"ts\">\nconst { user, loggedIn, ready } = useUserSession()\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"!ready\">Loading...\u003C/div>\n  \u003Cdiv v-else-if=\"loggedIn\">Welcome, {{ user?.name }}\u003C/div>\n  \u003Cdiv v-else>Please log in\u003C/div>\n\u003C/template>\n","pages/protected.vue","vue",[169,794,795,821,847,856,860,869,897,922,942],{"__ignoreMap":167},[172,796,797,801,805,809,812,815,818],{"class":174,"line":175},[172,798,800],{"class":799},"sL9le","\u003C",[172,802,804],{"class":803},"stweg","script",[172,806,808],{"class":807},"s0frj"," setup",[172,810,811],{"class":807}," lang",[172,813,317],{"class":814},"sNM9w",[172,816,817],{"class":666},"\"ts\"",[172,819,820],{"class":799},">\n",[172,822,823,825,828,830,832,835,837,839,841,843,845],{"class":174,"line":181},[172,824,245],{"class":244},[172,826,456],{"class":827},"sEEOt",[172,829,346],{"class":254},[172,831,393],{"class":827},[172,833,834],{"class":254},"loggedIn",[172,836,393],{"class":827},[172,838,354],{"class":254},[172,840,461],{"class":827},[172,842,317],{"class":316},[172,844,321],{"class":320},[172,846,324],{"class":827},[172,848,849,852,854],{"class":174,"line":188},[172,850,851],{"class":799},"\u003C/",[172,853,804],{"class":803},[172,855,820],{"class":799},[172,857,858],{"class":174,"line":194},[172,859,185],{"emptyLinePlaceholder":184},[172,861,862,864,867],{"class":174,"line":200},[172,863,800],{"class":799},[172,865,866],{"class":803},"template",[172,868,820],{"class":799},[172,870,871,874,877,880,882,885,888,891,893,895],{"class":174,"line":206},[172,872,873],{"class":799},"  \u003C",[172,875,876],{"class":803},"div",[172,878,879],{"class":807}," v-if",[172,881,317],{"class":814},[172,883,884],{"class":666},"\"!ready\"",[172,886,887],{"class":799},">",[172,889,890],{"class":827},"Loading...",[172,892,851],{"class":799},[172,894,876],{"class":803},[172,896,820],{"class":799},[172,898,899,901,903,906,908,911,913,916,918,920],{"class":174,"line":212},[172,900,873],{"class":799},[172,902,876],{"class":803},[172,904,905],{"class":807}," v-else-if",[172,907,317],{"class":814},[172,909,910],{"class":666},"\"loggedIn\"",[172,912,887],{"class":799},[172,914,915],{"class":827},"Welcome, {{ user?.name }}",[172,917,851],{"class":799},[172,919,876],{"class":803},[172,921,820],{"class":799},[172,923,924,926,928,931,933,936,938,940],{"class":174,"line":218},[172,925,873],{"class":799},[172,927,876],{"class":803},[172,929,930],{"class":807}," v-else",[172,932,887],{"class":799},[172,934,935],{"class":827},"Please log in",[172,937,851],{"class":799},[172,939,876],{"class":803},[172,941,820],{"class":799},[172,943,944,946,948],{"class":174,"line":224},[172,945,851],{"class":799},[172,947,866],{"class":803},[172,949,820],{"class":799},[326,951,953],{"id":952},"server-side-session-access","Server-Side Session Access",[229,955,956],{},"For server handlers and API routes, use the server utilities:",[161,958,959],{"className":234,"code":412,"filename":413,"language":237,"meta":167,"style":167},[169,960,961,983,1005,1035],{"__ignoreMap":167},[172,962,963,965,967,969,971,973,975,977,979,981],{"class":174,"line":175},[172,964,420],{"class":244},[172,966,424],{"class":423},[172,968,427],{"class":320},[172,970,430],{"class":248},[172,972,433],{"class":244},[172,974,436],{"class":248},[172,976,440],{"class":439},[172,978,443],{"class":248},[172,980,446],{"class":244},[172,982,249],{"class":248},[172,984,985,987,989,991,993,995,997,999,1001,1003],{"class":174,"line":181},[172,986,453],{"class":244},[172,988,456],{"class":248},[172,990,346],{"class":254},[172,992,461],{"class":248},[172,994,317],{"class":316},[172,996,466],{"class":244},[172,998,469],{"class":320},[172,1000,430],{"class":248},[172,1002,440],{"class":474},[172,1004,477],{"class":248},[172,1006,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033],{"class":174,"line":188},[172,1008,482],{"class":244},[172,1010,456],{"class":248},[172,1012,487],{"class":474},[172,1014,491],{"class":490},[172,1016,495],{"class":494},[172,1018,359],{"class":248},[172,1020,487],{"class":474},[172,1022,393],{"class":248},[172,1024,504],{"class":474},[172,1026,491],{"class":490},[172,1028,495],{"class":494},[172,1030,359],{"class":248},[172,1032,504],{"class":474},[172,1034,515],{"class":248},[172,1036,1037],{"class":174,"line":194},[172,1038,520],{"class":248},[326,1040,1042],{"id":1041},"session-refresh","Session Refresh",[229,1044,1045],{},"Force refresh the session data:",[161,1047,1049],{"className":789,"code":1048,"language":792,"meta":167,"style":167},"\u003Cscript setup lang=\"ts\">\nconst { fetchSession, ready } = useUserSession()\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cbutton :disabled=\"!ready\" @click=\"fetchSession({ force: true })\">\n    Refresh session\n  \u003C/button>\n\u003C/template>\n",[169,1050,1051,1067,1088,1096,1100,1108,1132,1137,1146],{"__ignoreMap":167},[172,1052,1053,1055,1057,1059,1061,1063,1065],{"class":174,"line":175},[172,1054,800],{"class":799},[172,1056,804],{"class":803},[172,1058,808],{"class":807},[172,1060,811],{"class":807},[172,1062,317],{"class":814},[172,1064,817],{"class":666},[172,1066,820],{"class":799},[172,1068,1069,1071,1073,1076,1078,1080,1082,1084,1086],{"class":174,"line":181},[172,1070,245],{"class":244},[172,1072,456],{"class":827},[172,1074,1075],{"class":254},"fetchSession",[172,1077,393],{"class":827},[172,1079,354],{"class":254},[172,1081,461],{"class":827},[172,1083,317],{"class":316},[172,1085,321],{"class":320},[172,1087,324],{"class":827},[172,1089,1090,1092,1094],{"class":174,"line":188},[172,1091,851],{"class":799},[172,1093,804],{"class":803},[172,1095,820],{"class":799},[172,1097,1098],{"class":174,"line":194},[172,1099,185],{"emptyLinePlaceholder":184},[172,1101,1102,1104,1106],{"class":174,"line":200},[172,1103,800],{"class":799},[172,1105,866],{"class":803},[172,1107,820],{"class":799},[172,1109,1110,1112,1115,1118,1120,1122,1125,1127,1130],{"class":174,"line":206},[172,1111,873],{"class":799},[172,1113,1114],{"class":803},"button",[172,1116,1117],{"class":807}," :disabled",[172,1119,317],{"class":814},[172,1121,884],{"class":666},[172,1123,1124],{"class":807}," @click",[172,1126,317],{"class":814},[172,1128,1129],{"class":666},"\"fetchSession({ force: true })\"",[172,1131,820],{"class":799},[172,1133,1134],{"class":174,"line":212},[172,1135,1136],{"class":827},"    Refresh session\n",[172,1138,1139,1142,1144],{"class":174,"line":218},[172,1140,1141],{"class":799},"  \u003C/",[172,1143,1114],{"class":803},[172,1145,820],{"class":799},[172,1147,1148,1150,1152],{"class":174,"line":224},[172,1149,851],{"class":799},[172,1151,866],{"class":803},[172,1153,820],{"class":799},[326,1155,1157],{"id":1156},"session-lifetime","Session Lifetime",[229,1159,1160],{},"Configure session duration in your auth config:",[161,1162,1165],{"className":234,"code":1163,"filename":1164,"language":237,"meta":167,"style":167},"import { defineServerAuth } from '@onmax/nuxt-better-auth/config'\n\nexport default defineServerAuth({\n  session: {\n    expiresIn: 60 * 60 * 24 * 7, // 7 days\n    cookieCache: {\n      enabled: true,\n      maxAge: 5 * 60, // 5 minutes\n    },\n  },\n})\n","server/auth.config.ts",[169,1166,1167,1185,1189,1200,1208,1240,1249,1260,1279,1283,1287],{"__ignoreMap":167},[172,1168,1169,1172,1174,1177,1179,1182],{"class":174,"line":175},[172,1170,1171],{"class":244},"import",[172,1173,456],{"class":248},[172,1175,1176],{"class":474},"defineServerAuth",[172,1178,461],{"class":248},[172,1180,1181],{"class":244},"from",[172,1183,1184],{"class":666}," '@onmax/nuxt-better-auth/config'\n",[172,1186,1187],{"class":174,"line":181},[172,1188,185],{"emptyLinePlaceholder":184},[172,1190,1191,1193,1195,1198],{"class":174,"line":188},[172,1192,420],{"class":244},[172,1194,424],{"class":423},[172,1196,1197],{"class":320}," defineServerAuth",[172,1199,558],{"class":248},[172,1201,1202,1204,1206],{"class":174,"line":194},[172,1203,263],{"class":474},[172,1205,491],{"class":490},[172,1207,249],{"class":248},[172,1209,1210,1213,1215,1218,1222,1224,1226,1229,1231,1234,1236],{"class":174,"line":200},[172,1211,1212],{"class":474},"    expiresIn",[172,1214,491],{"class":490},[172,1216,1217],{"class":586}," 60",[172,1219,1221],{"class":1220},"sn-Jc"," *",[172,1223,1217],{"class":586},[172,1225,1221],{"class":1220},[172,1227,1228],{"class":586}," 24",[172,1230,1221],{"class":1220},[172,1232,1233],{"class":586}," 7",[172,1235,393],{"class":248},[172,1237,1239],{"class":1238},"st7cf","// 7 days\n",[172,1241,1242,1245,1247],{"class":174,"line":206},[172,1243,1244],{"class":474},"    cookieCache",[172,1246,491],{"class":490},[172,1248,249],{"class":248},[172,1250,1251,1254,1256,1258],{"class":174,"line":212},[172,1252,1253],{"class":474},"      enabled",[172,1255,491],{"class":490},[172,1257,587],{"class":586},[172,1259,258],{"class":248},[172,1261,1262,1265,1267,1270,1272,1274,1276],{"class":174,"line":218},[172,1263,1264],{"class":474},"      maxAge",[172,1266,491],{"class":490},[172,1268,1269],{"class":586}," 5",[172,1271,1221],{"class":1220},[172,1273,1217],{"class":586},[172,1275,393],{"class":248},[172,1277,1278],{"class":1238},"// 5 minutes\n",[172,1280,1281],{"class":174,"line":224},[172,1282,594],{"class":248},[172,1284,1285],{"class":174,"line":310},[172,1286,599],{"class":248},[172,1288,1290],{"class":174,"line":1289},11,[172,1291,520],{"class":248},[780,1293],{"to":146,"title":1294},"BetterAuthState component",[1296,1297,1298],"style",{},"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 .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html pre.shiki code .s6Rhl, html code.shiki .s6Rhl{--shiki-light:#986801;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sQBpM, html code.shiki .sQBpM{--shiki-light:#0184BC;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}html pre.shiki code .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .sKg8T, html code.shiki .sKg8T{--shiki-light:#E45649;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sgisi, html code.shiki .sgisi{--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-default:#FF7EDB;--shiki-default-font-style:italic;--shiki-dark:#FF7EDB;--shiki-dark-font-style:italic}html pre.shiki code .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .sL9le, html code.shiki .sL9le{--shiki-light:#383A42;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .stweg, html code.shiki .stweg{--shiki-light:#E45649;--shiki-default:#72F1B8;--shiki-dark:#72F1B8}html pre.shiki code .s0frj, html code.shiki .s0frj{--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-default:#FEDE5D;--shiki-default-font-style:italic;--shiki-dark:#FEDE5D;--shiki-dark-font-style:italic}html pre.shiki code .sNM9w, html code.shiki .sNM9w{--shiki-light:#383A42;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .sEEOt, html code.shiki .sEEOt{--shiki-light:#383A42;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}html pre.shiki code .sn-Jc, html code.shiki .sn-Jc{--shiki-light:#0184BC;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .st7cf, html code.shiki .st7cf{--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-default:#848BBD;--shiki-default-font-style:italic;--shiki-dark:#848BBD;--shiki-dark-font-style:italic}",{"title":167,"searchDepth":181,"depth":181,"links":1300},[1301,1304,1305,1306,1307,1308,1309],{"id":328,"depth":181,"text":329,"children":1302},[1303],{"id":524,"depth":188,"text":525},{"id":620,"depth":181,"text":621},{"id":774,"depth":181,"text":775},{"id":785,"depth":181,"text":786},{"id":952,"depth":181,"text":953},{"id":1041,"depth":181,"text":1042},{"id":1156,"depth":181,"text":1157},"Access reactive session state with SSR support using `useUserSession()`.","md",null,{},{"title":52,"description":1310},"kAj6GEMwjkhgQ7l9QAkV_mRjSmLo9yZwKgccvW0M6kU",[1317,1319],{"title":48,"path":49,"stem":50,"description":1318,"children":-1},"When to reach for the full Better Auth server instance.",{"title":56,"path":57,"stem":58,"description":1320,"children":-1},"Learn how to protect your pages and API routes using a layered approach.",1777451672377]