[{"data":1,"prerenderedAt":1058},["ShallowReactive",2],{"navigation_docs":3,"-guides-external-auth-backend":216,"-guides-external-auth-backend-surround":1053},[4,42,68,115,136,157],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.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","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","\u002Fgetting-started\u002Fclient-setup","1.getting-started\u002F3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","\u002Fgetting-started\u002Ftype-augmentation","1.getting-started\u002F4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","\u002Fgetting-started\u002Fschema-generation","1.getting-started\u002F5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","\u002Fgetting-started\u002Fhow-it-works","1.getting-started\u002F6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","\u002Fcore-concepts\u002Fserver-auth","2.core-concepts\u002F1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","\u002Fcore-concepts\u002Fsessions","2.core-concepts\u002F2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","\u002Fcore-concepts\u002Froute-protection","2.core-concepts\u002F3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","\u002Fcore-concepts\u002Fauto-imports-aliases","2.core-concepts\u002F4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","\u002Fcore-concepts\u002Fsecurity-caveats","2.core-concepts\u002F5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","\u002Fguides","3.guides",[73,77,82,86,90,94,99,103,107,111],{"title":74,"path":75,"stem":76},"Role‑Based Access","\u002Fguides\u002Frole-based-access","3.guides\u002F1.role-based-access",{"title":78,"path":79,"stem":80,"icon":81},"Setup diagnostics","\u002Fguides\u002Fdiagnostics","3.guides\u002F10.diagnostics","i-lucide-circle-alert",{"title":83,"path":84,"stem":85},"OAuth Providers","\u002Fguides\u002Foauth-providers","3.guides\u002F2.oauth-providers",{"title":87,"path":88,"stem":89},"Custom Database","\u002Fguides\u002Fcustom-database","3.guides\u002F3.custom-database",{"title":91,"path":92,"stem":93},"Database-less Mode","\u002Fguides\u002Fdatabase-less-mode","3.guides\u002F4.database-less-mode",{"title":95,"path":96,"stem":97,"icon":98},"External Auth Backend","\u002Fguides\u002Fexternal-auth-backend","3.guides\u002F5.external-auth-backend","i-lucide-server",{"title":100,"path":101,"stem":102},"Migrating from nuxt-auth-utils","\u002Fguides\u002Fmigrate-from-nuxt-auth-utils","3.guides\u002F6.migrate-from-nuxt-auth-utils",{"title":104,"path":105,"stem":106},"Two-Factor Authentication (TOTP + Backup Codes)","\u002Fguides\u002Ftwo-factor-auth","3.guides\u002F7.two-factor-auth",{"title":108,"path":109,"stem":110},"Testing","\u002Fguides\u002Ftesting","3.guides\u002F8.testing",{"title":112,"path":113,"stem":114},"Production Deployment","\u002Fguides\u002Fproduction-deployment","3.guides\u002F9.production-deployment",{"title":116,"path":117,"stem":118,"children":119,"page":67},"Integrations","\u002Fintegrations","4.integrations",[120,124,128,132],{"title":121,"path":122,"stem":123},"NuxtHub","\u002Fintegrations\u002Fnuxthub","4.integrations\u002F1.nuxthub",{"title":125,"path":126,"stem":127},"DevTools","\u002Fintegrations\u002Fdevtools","4.integrations\u002F2.devtools",{"title":129,"path":130,"stem":131},"Convex","\u002Fintegrations\u002Fconvex","4.integrations\u002F3.convex",{"title":133,"path":134,"stem":135},"i18n","\u002Fintegrations\u002Fi18n","4.integrations\u002F4.i18n",{"title":137,"path":138,"stem":139,"children":140,"page":67},"API Reference","\u002Fapi","5.api",[141,145,149,153],{"title":142,"path":143,"stem":144},"Composables","\u002Fapi\u002Fcomposables","5.api\u002F1.composables",{"title":146,"path":147,"stem":148},"Server Utilities","\u002Fapi\u002Fserver-utils","5.api\u002F2.server-utils",{"title":150,"path":151,"stem":152},"Components","\u002Fapi\u002Fcomponents","5.api\u002F3.components",{"title":154,"path":155,"stem":156},"Types","\u002Fapi\u002Ftypes","5.api\u002F4.types",{"title":158,"path":159,"stem":160,"children":161,"icon":81},"Errors","\u002Ferrors","6.errors\u002F0.index",[162,164,168,172,176,180,184,188,192,196,200,204,208,212],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Better Auth CLI is not installed","\u002Ferrors\u002Fnuxt-auth-cli-missing","6.errors\u002Fnuxt-auth-cli-missing",{"title":169,"path":170,"stem":171},"Better Auth CLI version does not match better-auth","\u002Ferrors\u002Fnuxt-auth-cli-version-mismatch","6.errors\u002Fnuxt-auth-cli-version-mismatch",{"title":173,"path":174,"stem":175},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":177,"path":178,"stem":179},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":181,"path":182,"stem":183},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":185,"path":186,"stem":187},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":189,"path":190,"stem":191},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":193,"path":194,"stem":195},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":197,"path":198,"stem":199},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":201,"path":202,"stem":203},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":205,"path":206,"stem":207},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":209,"path":210,"stem":211},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":213,"path":214,"stem":215},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":217,"title":95,"body":218,"description":1046,"extension":1047,"links":1048,"meta":1049,"navigation":1050,"path":96,"seo":1051,"stem":97,"__hash__":1052},"docs\u002F3.guides\u002F5.external-auth-backend.md",{"type":219,"value":220,"toc":1033},"minimark",[221,225,233,238,261,264,269,359,363,366,378,385,444,448,451,554,558,689,693,726,749,771,787,791,798,812,997,1000,1004,1012,1016,1029],[222,223,224],"p",{},"Use this guide when the Nuxt app is only the frontend and Better Auth runs somewhere else.",[222,226,227,228,232],{},"When your Better Auth server runs on a separate backend (e.g., standalone h3\u002FNitro project, Express, or any other server), use ",[229,230,231],"code",{},"clientOnly"," mode.",[234,235,237],"h2",{"id":236},"when-to-use","When to Use",[239,240,241,249,255],"ul",{},[242,243,244,248],"li",{},[245,246,247],"strong",{},"Microservices architecture",": Auth service is a separate deployment",[242,250,251,254],{},[245,252,253],{},"Shared auth",": Multiple frontends share one auth backend",[242,256,257,260],{},[245,258,259],{},"Existing backend",": You already have a Better Auth server running elsewhere",[234,262,18],{"id":263},"configuration",[265,266,268],"h3",{"id":267},"_1-enable-client-only-mode","1. Enable Client-Only Mode",[270,271,277],"pre",{"className":272,"code":273,"filename":274,"language":275,"meta":276,"style":276},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","export default defineNuxtConfig({\n  modules: ['@nuxtjs\u002Fbetter-auth'],\n  auth: {\n    clientOnly: true,\n  },\n})\n","nuxt.config.ts","ts","",[229,278,279,300,321,332,347,353],{"__ignoreMap":276},[280,281,284,288,292,296],"span",{"class":282,"line":283},"line",1,[280,285,287],{"class":286},"sqe1H","export",[280,289,291],{"class":290},"sKg8T"," default",[280,293,295],{"class":294},"sfT9l"," defineNuxtConfig",[280,297,299],{"class":298},"s17Py","({\n",[280,301,303,307,311,314,318],{"class":282,"line":302},2,[280,304,306],{"class":305},"sYvLG","  modules",[280,308,310],{"class":309},"sVnqq",":",[280,312,313],{"class":298}," [",[280,315,317],{"class":316},"sPAZv","'@nuxtjs\u002Fbetter-auth'",[280,319,320],{"class":298},"],\n",[280,322,324,327,329],{"class":282,"line":323},3,[280,325,326],{"class":305},"  auth",[280,328,310],{"class":309},[280,330,331],{"class":298}," {\n",[280,333,335,338,340,344],{"class":282,"line":334},4,[280,336,337],{"class":305},"    clientOnly",[280,339,310],{"class":309},[280,341,343],{"class":342},"s3ZNE"," true",[280,345,346],{"class":298},",\n",[280,348,350],{"class":282,"line":349},5,[280,351,352],{"class":298},"  },\n",[280,354,356],{"class":282,"line":355},6,[280,357,358],{"class":298},"})\n",[265,360,362],{"id":361},"_2-point-the-client-to-the-external-server","2. Point the Client to the External Server",[222,364,365],{},"Set the site URL to your external auth server:",[270,367,372],{"className":368,"code":369,"filename":370,"language":371,"meta":276,"style":276},"language-ini shiki shiki-themes one-light synthwave-84 synthwave-84","NUXT_PUBLIC_SITE_URL=\"https:\u002F\u002Fauth.example.com\"\n",".env","ini",[229,373,374],{"__ignoreMap":276},[280,375,376],{"class":282,"line":283},[280,377,369],{},[222,379,380,381,384],{},"This value becomes the default Better Auth client base URL in client-only mode. You can instead set ",[229,382,383],{},"baseURL"," in the client config. An explicit client config value takes precedence over the site URL:",[270,386,389],{"className":272,"code":387,"filename":388,"language":275,"meta":276,"style":276},"import { defineClientAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n\nexport default defineClientAuth({\n  baseURL: 'https:\u002F\u002Fauth.example.com',\n})\n","app\u002Fauth.config.ts",[229,390,391,411,417,428,440],{"__ignoreMap":276},[280,392,393,396,399,402,405,408],{"class":282,"line":283},[280,394,395],{"class":286},"import",[280,397,398],{"class":298}," { ",[280,400,401],{"class":305},"defineClientAuth",[280,403,404],{"class":298}," } ",[280,406,407],{"class":286},"from",[280,409,410],{"class":316}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[280,412,413],{"class":282,"line":302},[280,414,416],{"emptyLinePlaceholder":415},true,"\n",[280,418,419,421,423,426],{"class":282,"line":323},[280,420,287],{"class":286},[280,422,291],{"class":290},[280,424,425],{"class":294}," defineClientAuth",[280,427,299],{"class":298},[280,429,430,433,435,438],{"class":282,"line":334},[280,431,432],{"class":305},"  baseURL",[280,434,310],{"class":309},[280,436,437],{"class":316}," 'https:\u002F\u002Fauth.example.com'",[280,439,346],{"class":298},[280,441,442],{"class":282,"line":349},[280,443,358],{"class":298},[265,445,447],{"id":446},"_3-configure-route-redirect-targets-optional","3. Configure Route Redirect Targets (Optional)",[222,449,450],{},"Control redirect paths directly in route auth rules:",[270,452,454],{"className":272,"code":453,"filename":274,"language":275,"meta":276,"style":276},"export default defineNuxtConfig({\n  routeRules: {\n    '\u002Fapp\u002F**': { auth: { only: 'user', redirectTo: '\u002Flogin' } },\n    '\u002Flogin': { auth: { only: 'guest', redirectTo: '\u002Fapp' } },\n  },\n})\n",[229,455,456,466,475,513,546,550],{"__ignoreMap":276},[280,457,458,460,462,464],{"class":282,"line":283},[280,459,287],{"class":286},[280,461,291],{"class":290},[280,463,295],{"class":294},[280,465,299],{"class":298},[280,467,468,471,473],{"class":282,"line":302},[280,469,470],{"class":305},"  routeRules",[280,472,310],{"class":309},[280,474,331],{"class":298},[280,476,477,480,482,484,487,489,491,494,496,499,502,505,507,510],{"class":282,"line":323},[280,478,479],{"class":316},"    '\u002Fapp\u002F**'",[280,481,310],{"class":309},[280,483,398],{"class":298},[280,485,486],{"class":305},"auth",[280,488,310],{"class":309},[280,490,398],{"class":298},[280,492,493],{"class":305},"only",[280,495,310],{"class":309},[280,497,498],{"class":316}," 'user'",[280,500,501],{"class":298},", ",[280,503,504],{"class":305},"redirectTo",[280,506,310],{"class":309},[280,508,509],{"class":316}," '\u002Flogin'",[280,511,512],{"class":298}," } },\n",[280,514,515,518,520,522,524,526,528,530,532,535,537,539,541,544],{"class":282,"line":334},[280,516,517],{"class":316},"    '\u002Flogin'",[280,519,310],{"class":309},[280,521,398],{"class":298},[280,523,486],{"class":305},[280,525,310],{"class":309},[280,527,398],{"class":298},[280,529,493],{"class":305},[280,531,310],{"class":309},[280,533,534],{"class":316}," 'guest'",[280,536,501],{"class":298},[280,538,504],{"class":305},[280,540,310],{"class":309},[280,542,543],{"class":316}," '\u002Fapp'",[280,545,512],{"class":298},[280,547,548],{"class":282,"line":349},[280,549,352],{"class":298},[280,551,552],{"class":282,"line":355},[280,553,358],{"class":298},[234,555,557],{"id":556},"what-changes-in-client-only-mode","What Changes in Client-Only Mode",[559,560,561,577],"table",{},[562,563,564],"thead",{},[565,566,567,571,574],"tr",{},[568,569,570],"th",{},"Feature",[568,572,573],{},"Full Mode",[568,575,576],{},"Client-Only",[578,579,580,594,608,617,627,636,645,656,668,678],"tbody",{},[565,581,582,588,591],{},[583,584,585],"td",{},[229,586,587],{},"server\u002Fauth.config.ts",[583,589,590],{},"Required",[583,592,593],{},"Not needed",[565,595,596,602,605],{},[583,597,598,601],{},[229,599,600],{},"\u002Fapi\u002Fauth\u002F**"," handlers",[583,603,604],{},"Auto-registered",[583,606,607],{},"Skipped",[565,609,610,613,615],{},[583,611,612],{},"Auth secret configuration",[583,614,590],{},[583,616,593],{},[565,618,619,622,625],{},[583,620,621],{},"Server middleware",[583,623,624],{},"Enabled",[583,626,607],{},[565,628,629,632,634],{},[583,630,631],{},"Schema generation",[583,633,624],{},[583,635,607],{},[565,637,638,641,643],{},[583,639,640],{},"Devtools",[583,642,624],{},[583,644,607],{},[565,646,647,650,653],{},[583,648,649],{},"SSR session hydration",[583,651,652],{},"Server-side",[583,654,655],{},"Client-side only",[565,657,658,663,666],{},[583,659,660],{},[229,661,662],{},"useUserSession()",[583,664,665],{},"Works",[583,667,665],{},[565,669,670,673,675],{},[583,671,672],{},"Route protection",[583,674,665],{},[583,676,677],{},"Works (client-side)",[565,679,680,685,687],{},[583,681,682],{},[229,683,684],{},"\u003CBetterAuthState>",[583,686,665],{},[583,688,665],{},[234,690,692],{"id":691},"important-notes","Important Notes",[694,695,696,699],"warning",{},[222,697,698],{},"In client-only mode, all auth requests go directly to your external server. Ensure:",[239,700,701,708,719],{},[242,702,703,704,707],{},"CORS is configured on your auth server to allow requests from your frontend (with ",[229,705,706],{},"credentials: true",")",[242,709,710,711,714,715,718],{},"Cookies use ",[229,712,713],{},"SameSite=None; Secure"," when the frontend and auth backend are cross-site (HTTPS required). Same-site subdomains can use ",[229,716,717],{},"SameSite=Lax",".",[242,720,721,722,725],{},"Your auth server's ",[229,723,724],{},"trustedOrigins"," includes your frontend URL",[222,727,728,729,732,733,736,737,732,744,718],{},"An origin includes the scheme, host, and port. A site uses the scheme and registrable domain, so ",[229,730,731],{},"https:\u002F\u002Fapp.example.com"," and ",[229,734,735],{},"https:\u002F\u002Fauth.example.com"," are cross-origin but same-site. CORS still applies between them. See ",[738,739,743],"a",{"href":740,"rel":741},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FGlossary\u002FSite",[742],"nofollow","MDN's site definition",[738,745,748],{"href":746,"rel":747},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FSet-Cookie#samesitesamesite-value",[742],"cookie SameSite attributes",[750,751,752,753,756,757,759,760,762,763,766,767,770],"note",{},"In client-only mode, ",[229,754,755],{},"NUXT_PUBLIC_SITE_URL"," is used as the auth client base URL unless ",[229,758,401],{}," provides an explicit ",[229,761,383],{},".\nUse ",[229,764,765],{},"routeRules.auth.redirectTo"," (or page meta ",[229,768,769],{},"auth.redirectTo",") to control frontend navigation paths.",[750,772,773,774,501,776,732,779,782,783,786],{},"Server utilities like ",[229,775,48],{},[229,777,778],{},"getUserSession()",[229,780,781],{},"requireUserSession()"," are ",[245,784,785],{},"not available"," in client-only mode since there's no local auth server.",[234,788,790],{"id":789},"ssr-considerations","SSR Considerations",[222,792,793,794,797],{},"In client-only mode, session data is fetched ",[245,795,796],{},"client-side only",". This means:",[239,799,800,803,806],{},[242,801,802],{},"Server-rendered pages won't have access to session data during SSR",[242,804,805],{},"Pages will initially render as \"unauthenticated\" and hydrate with session data on the client",[242,807,808,809,811],{},"Use ",[229,810,684],{}," component to handle loading states gracefully",[270,813,817],{"className":814,"code":815,"language":816,"meta":276,"style":276},"language-vue shiki shiki-themes one-light synthwave-84 synthwave-84","\u003Ctemplate>\n  \u003CBetterAuthState>\n    \u003Ctemplate #default=\"{ user }\">\n      \u003Cdiv v-if=\"user\">Welcome, {{ user.name }}\u003C\u002Fdiv>\n      \u003Cdiv v-else>Please log in\u003C\u002Fdiv>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #placeholder>\n      \u003Cdiv>Loading...\u003C\u002Fdiv>\n    \u003C\u002Ftemplate>\n  \u003C\u002FBetterAuthState>\n\u003C\u002Ftemplate>\n","vue",[229,818,819,832,842,879,908,928,937,951,969,978,988],{"__ignoreMap":276},[280,820,821,825,829],{"class":282,"line":283},[280,822,824],{"class":823},"sL9le","\u003C",[280,826,828],{"class":827},"stweg","template",[280,830,831],{"class":823},">\n",[280,833,834,837,840],{"class":282,"line":302},[280,835,836],{"class":823},"  \u003C",[280,838,839],{"class":827},"BetterAuthState",[280,841,831],{"class":823},[280,843,844,847,849,853,857,861,865,868,872,875,877],{"class":282,"line":323},[280,845,846],{"class":823},"    \u003C",[280,848,828],{"class":827},[280,850,852],{"class":851},"sEEOt"," #",[280,854,856],{"class":855},"s0frj","default",[280,858,860],{"class":859},"sNM9w","=",[280,862,864],{"class":863},"ss3L-","\"",[280,866,867],{"class":851},"{ ",[280,869,871],{"class":870},"svFNh","user",[280,873,874],{"class":851}," }",[280,876,864],{"class":863},[280,878,831],{"class":823},[280,880,881,884,887,890,892,895,898,901,904,906],{"class":282,"line":334},[280,882,883],{"class":823},"      \u003C",[280,885,886],{"class":827},"div",[280,888,889],{"class":855}," v-if",[280,891,860],{"class":859},[280,893,894],{"class":316},"\"user\"",[280,896,897],{"class":823},">",[280,899,900],{"class":851},"Welcome, {{ user.name }}",[280,902,903],{"class":823},"\u003C\u002F",[280,905,886],{"class":827},[280,907,831],{"class":823},[280,909,910,912,914,917,919,922,924,926],{"class":282,"line":349},[280,911,883],{"class":823},[280,913,886],{"class":827},[280,915,916],{"class":855}," v-else",[280,918,897],{"class":823},[280,920,921],{"class":851},"Please log in",[280,923,903],{"class":823},[280,925,886],{"class":827},[280,927,831],{"class":823},[280,929,930,933,935],{"class":282,"line":355},[280,931,932],{"class":823},"    \u003C\u002F",[280,934,828],{"class":827},[280,936,831],{"class":823},[280,938,940,942,944,946,949],{"class":282,"line":939},7,[280,941,846],{"class":823},[280,943,828],{"class":827},[280,945,852],{"class":851},[280,947,948],{"class":855},"placeholder",[280,950,831],{"class":823},[280,952,954,956,958,960,963,965,967],{"class":282,"line":953},8,[280,955,883],{"class":823},[280,957,886],{"class":827},[280,959,897],{"class":823},[280,961,962],{"class":851},"Loading...",[280,964,903],{"class":823},[280,966,886],{"class":827},[280,968,831],{"class":823},[280,970,972,974,976],{"class":282,"line":971},9,[280,973,932],{"class":823},[280,975,828],{"class":827},[280,977,831],{"class":823},[280,979,981,984,986],{"class":282,"line":980},10,[280,982,983],{"class":823},"  \u003C\u002F",[280,985,839],{"class":827},[280,987,831],{"class":823},[280,989,991,993,995],{"class":282,"line":990},11,[280,992,903],{"class":823},[280,994,828],{"class":827},[280,996,831],{"class":823},[222,998,999],{},"If you need SSR session hydration, consider using full mode with a local auth server instead.",[234,1001,1003],{"id":1002},"example-architecture","Example Architecture",[270,1005,1010],{"className":1006,"code":1008,"language":1009},[1007],"language-text","┌─────────────────┐     ┌─────────────────┐\n│   Nuxt App      │────▶│  Auth Server    │\n│  (clientOnly)   │     │ (Better Auth)   │\n│                 │◀────│                 │\n└─────────────────┘     └────────┬────────┘\n                                 │\n                        ┌────────▼────────┐\n                        │    Database     │\n                        └─────────────────┘\n","text",[229,1011,1008],{"__ignoreMap":276},[234,1013,1015],{"id":1014},"related","Related",[239,1017,1018,1023],{},[242,1019,1020,1022],{},[738,1021,18],{"href":19}," - Module options reference",[242,1024,1025,1028],{},[738,1026,1027],{"href":92},"Database-Less Mode"," - JWE sessions without database",[1030,1031,1032],"style",{},"html pre.shiki code .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sKg8T, html code.shiki .sKg8T{--shiki-light:#E45649;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}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 .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}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 .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 .sEEOt, html code.shiki .sEEOt{--shiki-light:#383A42;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}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 .ss3L-, html code.shiki .ss3L-{--shiki-light:#383A42;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}",{"title":276,"searchDepth":302,"depth":302,"links":1034},[1035,1036,1041,1042,1043,1044,1045],{"id":236,"depth":302,"text":237},{"id":263,"depth":302,"text":18,"children":1037},[1038,1039,1040],{"id":267,"depth":323,"text":268},{"id":361,"depth":323,"text":362},{"id":446,"depth":323,"text":447},{"id":556,"depth":302,"text":557},{"id":691,"depth":302,"text":692},{"id":789,"depth":302,"text":790},{"id":1002,"depth":302,"text":1003},{"id":1014,"depth":302,"text":1015},"Use nuxt-better-auth with a separate Better Auth server.","md",null,{},{"icon":98},{"title":95,"description":1046},"oRgLuKqeI-pkL8KYqxjO9UcgnyskKYtDVFBGD4wKJvI",[1054,1056],{"title":91,"path":92,"stem":93,"description":1055,"children":-1},"Run Better Auth without a database for edge and serverless deployments.",{"title":100,"path":101,"stem":102,"description":1057,"children":-1},"Step-by-step guide to migrate from nuxt-auth-utils to Nuxt Better Auth.",1792535505093]