[{"data":1,"prerenderedAt":647},["ShallowReactive",2],{"navigation_docs":3,"-guides-database-less-mode":152,"-guides-database-less-mode-surround":642},[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":86,"body":154,"description":636,"extension":637,"links":638,"meta":639,"navigation":384,"path":87,"seo":640,"stem":88,"__hash__":641},"docs/3.guides/4.database-less-mode.md",{"type":155,"value":156,"toc":625},"minimark",[157,161,172,179,184,209,214,219,222,228,232,235,239,247,251,254,259,263,266,271,282,286,289,347,351,354,582,585,589,594,605,610,621],[158,159,160],"p",{},"Better Auth supports running without a database using encrypted cookie sessions (JWE).",[162,163,166,167,171],"callout",{"icon":164,"to":165},"i-lucide-external-link","https://www.better-auth.com/docs/concepts/database#primitives-for-database-less-auth","See the official ",[168,169,170],"strong",{},"Better Auth documentation"," for database-less setup.",[158,173,174,175,178],{},"Database-less mode uses ",[168,176,177],{},"JWE (JSON Web Encryption)"," sessions. Instead of storing sessions in a database, the session data is encrypted and stored entirely in the cookie.",[158,180,181],{},[168,182,183],{},"How it works:",[185,186,187,200,203,206],"ul",{},[188,189,190,191,195,196,199],"li",{},"Session data is encrypted with your ",[192,193,194],"code",{},"NUXT_BETTER_AUTH_SECRET"," (",[192,197,198],{},"BETTER_AUTH_SECRET"," is also supported as a fallback)",[188,201,202],{},"The encrypted token is stored in a cookie",[188,204,205],{},"On each request, the server decrypts the cookie to get session data",[188,207,208],{},"No database queries needed for session validation",[210,211,213],"h2",{"id":212},"limitations","Limitations",[215,216,218],"h3",{"id":217},"no-server-side-session-revocation","No Server-Side Session Revocation",[158,220,221],{},"You cannot invalidate a session before it expires. The user must wait for the cookie to expire.",[158,223,224,227],{},[168,225,226],{},"Workaround:"," Use short session lifetimes (e.g., 1 hour) and implement token refresh.",[215,229,231],{"id":230},"no-emailpassword-without-external-storage","No Email/Password Without External Storage",[158,233,234],{},"Email/password requires storing user credentials somewhere.",[158,236,237],{},[168,238,226],{},[185,240,241,244],{},[188,242,243],{},"Use OAuth providers only (GitHub, Google store the credentials)",[188,245,246],{},"Or use an external user database while keeping sessions database-less",[215,248,250],{"id":249},"no-multi-device-session-management","No Multi-Device Session Management",[158,252,253],{},"Cannot list or revoke sessions across devices.",[158,255,256,258],{},[168,257,226],{}," Implement device tracking in your application layer if needed.",[215,260,262],{"id":261},"oauth-considerations","OAuth Considerations",[158,264,265],{},"OAuth can work in database-less mode, but account state is stored in encrypted cookies (JWE) instead of a database. This limits server-side management and auditing.",[267,268,270],"h4",{"id":269},"when-to-avoid-db-less-oauth","When to avoid DB-less OAuth",[185,272,273,276,279],{},[188,274,275],{},"You need to list/revoke sessions across devices",[188,277,278],{},"You need durable account records (admin tools, audits)",[188,280,281],{},"You rely on server-side account linking or management",[210,283,285],{"id":284},"nuxt-configuration","Nuxt Configuration",[158,287,288],{},"Simply don't configure a database adapter:",[290,291,297],"pre",{"className":292,"code":293,"filename":294,"language":295,"meta":296,"style":296},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","export default defineNuxtConfig({\n  modules: ['@onmax/nuxt-better-auth'],\n})\n","nuxt.config.ts","ts","",[192,298,299,320,341],{"__ignoreMap":296},[300,301,304,308,312,316],"span",{"class":302,"line":303},"line",1,[300,305,307],{"class":306},"sqe1H","export",[300,309,311],{"class":310},"sKg8T"," default",[300,313,315],{"class":314},"sfT9l"," defineNuxtConfig",[300,317,319],{"class":318},"s17Py","({\n",[300,321,323,327,331,334,338],{"class":302,"line":322},2,[300,324,326],{"class":325},"sYvLG","  modules",[300,328,330],{"class":329},"sVnqq",":",[300,332,333],{"class":318}," [",[300,335,337],{"class":336},"sPAZv","'@onmax/nuxt-better-auth'",[300,339,340],{"class":318},"],\n",[300,342,344],{"class":302,"line":343},3,[300,345,346],{"class":318},"})\n",[210,348,350],{"id":349},"auth-configuration","Auth Configuration",[158,352,353],{},"Enable JWE sessions and cookie-based OAuth state:",[290,355,358],{"className":292,"code":356,"filename":357,"language":295,"meta":296,"style":296},"import { defineServerAuth } from '@onmax/nuxt-better-auth/config'\n\nexport default defineServerAuth({\n  socialProviders: {\n    github: { clientId: '...', clientSecret: '...' },\n  },\n  session: {\n    cookieCache: {\n      enabled: true,\n      maxAge: 7 * 24 * 60 * 60, // 7 days\n      strategy: 'jwe',\n    },\n  },\n  account: {\n    storeStateStrategy: 'cookie',\n    storeAccountCookie: true,\n  },\n})\n","server/auth.config.ts",[192,359,360,380,386,397,408,439,445,455,465,480,513,526,532,537,547,560,572,577],{"__ignoreMap":296},[300,361,362,365,368,371,374,377],{"class":302,"line":303},[300,363,364],{"class":306},"import",[300,366,367],{"class":318}," { ",[300,369,370],{"class":325},"defineServerAuth",[300,372,373],{"class":318}," } ",[300,375,376],{"class":306},"from",[300,378,379],{"class":336}," '@onmax/nuxt-better-auth/config'\n",[300,381,382],{"class":302,"line":322},[300,383,385],{"emptyLinePlaceholder":384},true,"\n",[300,387,388,390,392,395],{"class":302,"line":343},[300,389,307],{"class":306},[300,391,311],{"class":310},[300,393,394],{"class":314}," defineServerAuth",[300,396,319],{"class":318},[300,398,400,403,405],{"class":302,"line":399},4,[300,401,402],{"class":325},"  socialProviders",[300,404,330],{"class":329},[300,406,407],{"class":318}," {\n",[300,409,411,414,416,418,421,423,426,429,432,434,436],{"class":302,"line":410},5,[300,412,413],{"class":325},"    github",[300,415,330],{"class":329},[300,417,367],{"class":318},[300,419,420],{"class":325},"clientId",[300,422,330],{"class":329},[300,424,425],{"class":336}," '...'",[300,427,428],{"class":318},", ",[300,430,431],{"class":325},"clientSecret",[300,433,330],{"class":329},[300,435,425],{"class":336},[300,437,438],{"class":318}," },\n",[300,440,442],{"class":302,"line":441},6,[300,443,444],{"class":318},"  },\n",[300,446,448,451,453],{"class":302,"line":447},7,[300,449,450],{"class":325},"  session",[300,452,330],{"class":329},[300,454,407],{"class":318},[300,456,458,461,463],{"class":302,"line":457},8,[300,459,460],{"class":325},"    cookieCache",[300,462,330],{"class":329},[300,464,407],{"class":318},[300,466,468,471,473,477],{"class":302,"line":467},9,[300,469,470],{"class":325},"      enabled",[300,472,330],{"class":329},[300,474,476],{"class":475},"s3ZNE"," true",[300,478,479],{"class":318},",\n",[300,481,483,486,488,491,495,498,500,503,505,507,509],{"class":302,"line":482},10,[300,484,485],{"class":325},"      maxAge",[300,487,330],{"class":329},[300,489,490],{"class":475}," 7",[300,492,494],{"class":493},"sn-Jc"," *",[300,496,497],{"class":475}," 24",[300,499,494],{"class":493},[300,501,502],{"class":475}," 60",[300,504,494],{"class":493},[300,506,502],{"class":475},[300,508,428],{"class":318},[300,510,512],{"class":511},"st7cf","// 7 days\n",[300,514,516,519,521,524],{"class":302,"line":515},11,[300,517,518],{"class":325},"      strategy",[300,520,330],{"class":329},[300,522,523],{"class":336}," 'jwe'",[300,525,479],{"class":318},[300,527,529],{"class":302,"line":528},12,[300,530,531],{"class":318},"    },\n",[300,533,535],{"class":302,"line":534},13,[300,536,444],{"class":318},[300,538,540,543,545],{"class":302,"line":539},14,[300,541,542],{"class":325},"  account",[300,544,330],{"class":329},[300,546,407],{"class":318},[300,548,550,553,555,558],{"class":302,"line":549},15,[300,551,552],{"class":325},"    storeStateStrategy",[300,554,330],{"class":329},[300,556,557],{"class":336}," 'cookie'",[300,559,479],{"class":318},[300,561,563,566,568,570],{"class":302,"line":562},16,[300,564,565],{"class":325},"    storeAccountCookie",[300,567,330],{"class":329},[300,569,476],{"class":475},[300,571,479],{"class":318},[300,573,575],{"class":302,"line":574},17,[300,576,444],{"class":318},[300,578,580],{"class":302,"line":579},18,[300,581,346],{"class":318},[158,583,584],{},"This stores sessions and OAuth state in encrypted cookies instead of a database.",[210,586,588],{"id":587},"when-to-use-database-less-mode","When to Use Database-less Mode",[158,590,591],{},[168,592,593],{},"Good fit:",[185,595,596,599,602],{},[188,597,598],{},"OAuth-only authentication (GitHub, Google, etc.)",[188,600,601],{},"Serverless deployments with cold start concerns",[188,603,604],{},"Simple applications without session management needs",[158,606,607],{},[168,608,609],{},"Not recommended:",[185,611,612,615,618],{},[188,613,614],{},"Applications requiring session revocation",[188,616,617],{},"Multi-device session management",[188,619,620],{},"Email/password authentication",[622,623,624],"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 .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 .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}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":296,"searchDepth":322,"depth":322,"links":626},[627,633,634,635],{"id":212,"depth":322,"text":213,"children":628},[629,630,631,632],{"id":217,"depth":343,"text":218},{"id":230,"depth":343,"text":231},{"id":249,"depth":343,"text":250},{"id":261,"depth":343,"text":262},{"id":284,"depth":322,"text":285},{"id":349,"depth":322,"text":350},{"id":587,"depth":322,"text":588},"Run Better Auth without a database for edge and serverless deployments.","md",null,{},{"title":86,"description":636},"7AW3WrhXn5ElJnM7FDxafwIZhxoQBdJ3pcgLioykya0",[643,645],{"title":82,"path":83,"stem":84,"description":644,"children":-1},"Use your own database with Drizzle, Prisma, or Kysely adapters.",{"title":90,"path":91,"stem":92,"description":646,"icon":93,"children":-1},"Use nuxt-better-auth with a separate Better Auth server.",1775080954223]