[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation_en":3,"/docs/features/auth-data":144},[4,16,91,117,127],{"title":5,"path":6,"stem":7,"children":8,"icon":15},"Getting Started","/docs/get-started","docs/1.get-started/1.index",[9,11],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Setup","/docs/get-started/setup","docs/1.get-started/2.setup","mage:fast-forward-fill",{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":90},"Features","ic:baseline-cable","/docs/features","docs/2.features",[22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86],{"title":23,"path":24,"stem":25},"Database","/docs/features/database","docs/2.features/01.database",{"title":27,"path":28,"stem":29},"Authentication","/docs/features/auth","docs/2.features/02.auth",{"title":31,"path":32,"stem":33},"Payments","/docs/features/payments","docs/2.features/03.payments",{"title":35,"path":36,"stem":37},"Admin Panel","/docs/features/admin-panel","docs/2.features/04.admin-panel",{"title":39,"path":40,"stem":41},"AI","/docs/features/ai","docs/2.features/05.ai",{"title":43,"path":44,"stem":45},"Customization","/docs/features/customization","docs/2.features/06.customization",{"title":47,"path":48,"stem":49},"Storage","/docs/features/storage","docs/2.features/07.storage",{"title":51,"path":52,"stem":53},"Email","/docs/features/email","docs/2.features/08.email",{"title":55,"path":56,"stem":57},"Languages","/docs/features/languages","docs/2.features/09.languages",{"title":59,"path":60,"stem":61},"SEO","/docs/features/seo","docs/2.features/10.seo",{"title":63,"path":64,"stem":65},"Blogs","/docs/features/blogs","docs/2.features/11.blogs",{"title":67,"path":68,"stem":69},"Documentation","/docs/features/documentation","docs/2.features/12.documentation",{"title":71,"path":72,"stem":73},"Cron Jobs","/docs/features/cron-jobs","docs/2.features/13.cron-jobs",{"title":75,"path":76,"stem":77},"Error Handling","/docs/features/error-handling","docs/2.features/14.error-handling",{"title":79,"path":80,"stem":81},"Analytics","/docs/features/analytics","docs/2.features/15.analytics",{"title":83,"path":84,"stem":85},"PWA","/docs/features/pwa","docs/2.features/15.pwa",{"title":87,"path":88,"stem":89},"Customer Support","/docs/features/customer-support","docs/2.features/16.customer-support",false,{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":90},"Tutorials","ic:baseline-library-books","/docs/tutorials","docs/3.tutorials",[97,101,105,109,113],{"title":98,"path":99,"stem":100},"Project Structure","/docs/tutorials/project-structure","docs/3.tutorials/1.project-structure",{"title":102,"path":103,"stem":104},"Page Routes","/docs/tutorials/page-routes","docs/3.tutorials/2.page-routes",{"title":106,"path":107,"stem":108},"API Calls","/docs/tutorials/api-calls","docs/3.tutorials/3.api-calls",{"title":110,"path":111,"stem":112},"State Management","/docs/tutorials/state-management","docs/3.tutorials/4.state-management",{"title":114,"path":115,"stem":116},"Legal Pages by GPT","/docs/tutorials/legal-pages-by-gpt","docs/3.tutorials/5.legal-pages-by-gpt",{"title":118,"icon":119,"path":120,"stem":121,"children":122,"page":90},"Formatting & Linting","ic:baseline-format-align-left","/docs/formatting-and-linting","docs/4.formatting-and-linting",[123],{"title":124,"path":125,"stem":126},"Overview","/docs/formatting-and-linting/overview","docs/4.formatting-and-linting/1.overview",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":90},"Deployment","ic:baseline-rocket-launch","/docs/deployment","docs/5.deployment",[133,136,140],{"title":124,"path":134,"stem":135},"/docs/deployment/overview","docs/5.deployment/1.overview",{"title":137,"path":138,"stem":139},"Vercel","/docs/deployment/vercel","docs/5.deployment/2.vercel",{"title":141,"path":142,"stem":143},"Cloudflare Workers","/docs/deployment/cloudflare","docs/5.deployment/3.cloudflare",{"page":145,"surround":546},{"id":146,"title":27,"body":147,"description":539,"extension":540,"head":541,"meta":542,"navigation":278,"ogImage":541,"path":28,"robots":541,"schemaOrg":541,"seo":543,"sitemap":544,"stem":29,"__hash__":545},"docs_en/docs/2.features/02.auth.md",{"type":148,"value":149,"toc":534},"minimark",[150,155,171,174,489,493,530],[151,152,154],"h2",{"id":153},"tools","Tools",[156,157,158],"ul",{},[159,160,161,170],"li",{},[162,163,164],"strong",{},[165,166,169],"a",{"href":167,"target":168},"https://www.better-auth.com","_blank","Better Auth",": Provides secure authentication with email/password, OAuth, and magic link support.",[151,172,12],{"id":173},"setup",[175,176,177,193,477],"ol",{},[159,178,179,180,184,185,188,189,192],{},"For Google OAuth, sign up at ",[165,181,183],{"href":182,"target":168},"https://console.cloud.google.com/apis/credentials","Google Cloud Console"," and copy the ",[162,186,187],{},"Client ID"," and ",[162,190,191],{},"Client Secret",".",[159,194,195,196,447],{},"Update your config:",[197,198,204],"pre",{"className":199,"code":200,"filename":201,"language":202,"meta":203,"style":203},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","auth: {\n    enablePasswordLogin: true, // Allow email/password login and registration\n    enableEmailVerification: false, // Require email verification after signup\n    enableMagicLink: false, // Allow passwordless login via email link\n\n    oauthProviders: ['google'], // Enable Google OAuth\n\n    redirectAfterSignIn: '/', // Where to redirect after successful login\n    password: {\n        minLength: 8,\n        maxLength: 128,\n        pattern: /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/,\n    },\n},\n","shared/config.ts","ts","",[205,206,207,223,242,258,273,280,309,314,335,345,360,373,435,441],"code",{"__ignoreMap":203},[208,209,212,216,220],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"sBMFI","auth",[208,217,219],{"class":218},"sMK4o",":",[208,221,222],{"class":218}," {\n",[208,224,226,229,231,235,238],{"class":210,"line":225},2,[208,227,228],{"class":214},"    enablePasswordLogin",[208,230,219],{"class":218},[208,232,234],{"class":233},"sfNiH"," true",[208,236,237],{"class":218},",",[208,239,241],{"class":240},"sHwdD"," // Allow email/password login and registration\n",[208,243,245,248,250,253,255],{"class":210,"line":244},3,[208,246,247],{"class":214},"    enableEmailVerification",[208,249,219],{"class":218},[208,251,252],{"class":233}," false",[208,254,237],{"class":218},[208,256,257],{"class":240}," // Require email verification after signup\n",[208,259,261,264,266,268,270],{"class":210,"line":260},4,[208,262,263],{"class":214},"    enableMagicLink",[208,265,219],{"class":218},[208,267,252],{"class":233},[208,269,237],{"class":218},[208,271,272],{"class":240}," // Allow passwordless login via email link\n",[208,274,276],{"class":210,"line":275},5,[208,277,279],{"emptyLinePlaceholder":278},true,"\n",[208,281,283,286,288,292,295,299,301,304,306],{"class":210,"line":282},6,[208,284,285],{"class":214},"    oauthProviders",[208,287,219],{"class":218},[208,289,291],{"class":290},"swJcz"," [",[208,293,294],{"class":218},"'",[208,296,298],{"class":297},"sfazB","google",[208,300,294],{"class":218},[208,302,303],{"class":290},"]",[208,305,237],{"class":218},[208,307,308],{"class":240}," // Enable Google OAuth\n",[208,310,312],{"class":210,"line":311},7,[208,313,279],{"emptyLinePlaceholder":278},[208,315,317,320,322,325,328,330,332],{"class":210,"line":316},8,[208,318,319],{"class":214},"    redirectAfterSignIn",[208,321,219],{"class":218},[208,323,324],{"class":218}," '",[208,326,327],{"class":297},"/",[208,329,294],{"class":218},[208,331,237],{"class":218},[208,333,334],{"class":240}," // Where to redirect after successful login\n",[208,336,338,341,343],{"class":210,"line":337},9,[208,339,340],{"class":214},"    password",[208,342,219],{"class":218},[208,344,222],{"class":218},[208,346,348,351,353,357],{"class":210,"line":347},10,[208,349,350],{"class":214},"        minLength",[208,352,219],{"class":218},[208,354,356],{"class":355},"sbssI"," 8",[208,358,359],{"class":218},",\n",[208,361,363,366,368,371],{"class":210,"line":362},11,[208,364,365],{"class":214},"        maxLength",[208,367,219],{"class":218},[208,369,370],{"class":355}," 128",[208,372,359],{"class":218},[208,374,376,379,381,384,388,391,393,396,399,402,404,407,410,413,415,417,420,423,425,428,431,433],{"class":210,"line":375},12,[208,377,378],{"class":214},"        pattern",[208,380,219],{"class":218},[208,382,383],{"class":218}," /",[208,385,387],{"class":386},"s7zQu","^",[208,389,390],{"class":218},"(?=",[208,392,192],{"class":297},[208,394,395],{"class":218},"*",[208,397,398],{"class":297},"\\d",[208,400,401],{"class":218},")(?=",[208,403,192],{"class":297},[208,405,406],{"class":218},"*[",[208,408,409],{"class":297},"a-z",[208,411,412],{"class":218},"])(?=",[208,414,192],{"class":297},[208,416,406],{"class":218},[208,418,419],{"class":297},"A-Z",[208,421,422],{"class":218},"])",[208,424,192],{"class":297},[208,426,427],{"class":218},"{8,}",[208,429,430],{"class":386},"$",[208,432,327],{"class":218},[208,434,359],{"class":218},[208,436,438],{"class":210,"line":437},13,[208,439,440],{"class":218},"    },\n",[208,442,444],{"class":210,"line":443},14,[208,445,446],{"class":218},"},\n",[156,448,449],{},[159,450,451,454,455,458,459,458,462,465,466,469,470,458,473,476],{},[162,452,453],{},"Note",": Add more OAuth providers (e.g., ",[205,456,457],{},"github",", ",[205,460,461],{},"twitter",[205,463,464],{},"apple",") to ",[205,467,468],{},"oauthProviders"," and set corresponding environment variables (e.g., ",[205,471,472],{},"OAUTH_GITHUB_CLIENT_ID",[205,474,475],{},"OAUTH_GITHUB_CLIENT_SECRET",").",[159,478,479,480],{},"Set the following environment variables:",[197,481,487],{"className":482,"code":484,"filename":485,"language":486,"meta":203},[483],"language-text","BETTER_AUTH_SECRET=\"your-long-random-string\"\nOAUTH_GOOGLE_CLIENT_ID=\"your-google-client-id\"\nOAUTH_GOOGLE_CLIENT_SECRET=\"your-google-client-secret\"\n",".env","text",[205,488,484],{"__ignoreMap":203},[151,490,492],{"id":491},"usage","Usage",[156,494,495,501,507,513],{},[159,496,497,500],{},[162,498,499],{},"Email/Password",": Sign in, sign up, reset password, sign out",[159,502,503,506],{},[162,504,505],{},"Google OAuth",": Sign in with Google account",[159,508,509,512],{},[162,510,511],{},"Magic Link",": Sign in via email link",[159,514,515,518,519,188,522,525,526,529],{},[162,516,517],{},"Verify Setup",": Use ",[205,520,521],{},"user",[205,523,524],{},"loggedIn"," from ",[205,527,528],{},"useAuth"," composable",[531,532,533],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 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 .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 .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);}",{"title":203,"searchDepth":225,"depth":225,"links":535},[536,537,538],{"id":153,"depth":225,"text":154},{"id":173,"depth":225,"text":12},{"id":491,"depth":225,"text":492},"Set up authentication in your app to allow users to sign in, sign up, and manage accounts securely.","md",null,{},{"title":27,"description":539},{"loc":28},"LYFkoYQarf_E6thTMYCmmvWqYdDXDExqszOTMNt0nPs",[547,549],{"title":23,"path":24,"stem":25,"description":548,"children":-1},"Set up a PostgreSQL database in your app using Drizzle ORM to manage data like users and sessions.",{"title":31,"path":32,"stem":33,"description":550,"children":-1},"Set up Stripe, Polar, or Dodo Payments via Better Auth plugins to handle one-time and subscription payments."]