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