[{"data":1,"prerenderedAt":858},["ShallowReactive",2],{"navigation_docs":3,"-guides-oauth-providers":216,"-guides-oauth-providers-surround":853},[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":83,"body":218,"description":847,"extension":848,"links":849,"meta":850,"navigation":367,"path":84,"seo":851,"stem":85,"__hash__":852},"docs\u002F3.guides\u002F2.oauth-providers.md",{"type":219,"value":220,"toc":838},"minimark",[221,225,228,233,704,709,712,740,744,748,763,820,834],[222,223,224],"p",{},"Use this guide when you want to add a social provider to a full-mode Nuxt Better Auth setup.",[222,226,227],{},"This guide demonstrates OAuth setup using Google. Other providers follow the same pattern.",[229,230],"read-more",{"title":231,"to":232},"Better Auth OAuth documentation","https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fconcepts\u002Foauth",[234,235,236,241,274,291,302,306,325,332,487,491,651,683],"steps",{},[237,238,240],"h3",{"id":239},"create-a-google-oauth-app","Create a Google OAuth App",[242,243,244,255,258,265,271],"ol",{},[245,246,247,248],"li",{},"Go to ",[249,250,254],"a",{"href":251,"rel":252},"https:\u002F\u002Fconsole.cloud.google.com\u002F",[253],"nofollow","Google Cloud Console",[245,256,257],{},"Create a new project or select an existing one",[245,259,260,261],{},"Navigate to ",[262,263,264],"strong",{},"APIs & Services > Credentials",[245,266,267,268],{},"Click ",[262,269,270],{},"Create Credentials > OAuth client ID",[245,272,273],{},"Set the authorized redirect URI to:",[275,276,281],"pre",{"className":277,"code":278,"language":279,"meta":280,"style":280},"language-txt shiki shiki-themes one-light synthwave-84 synthwave-84","http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fauth\u002Fcallback\u002Fgoogle\n","txt","",[282,283,284],"code",{"__ignoreMap":280},[285,286,289],"span",{"class":287,"line":288},"line",1,[285,290,278],{},[222,292,293,294,297,298,301],{},"Include the Nuxt app base path in the callback URL. With ",[282,295,296],{},"app.baseURL: '\u002Fapp\u002F'",", register ",[282,299,300],{},"http:\u002F\u002Flocalhost:3000\u002Fapp\u002Fapi\u002Fauth\u002Fcallback\u002Fgoogle",". Use the same path under your public origin in production.",[237,303,305],{"id":304},"add-environment-variables","Add Environment Variables",[275,307,312],{"className":308,"code":309,"filename":310,"language":311,"meta":280,"style":280},"language-ini shiki shiki-themes one-light synthwave-84 synthwave-84","GOOGLE_CLIENT_ID=\"your-client-id\"\nGOOGLE_CLIENT_SECRET=\"your-client-secret\"\n",".env","ini",[282,313,314,319],{"__ignoreMap":280},[285,315,316],{"class":287,"line":288},[285,317,318],{},"GOOGLE_CLIENT_ID=\"your-client-id\"\n",[285,320,322],{"class":287,"line":321},2,[285,323,324],{},"GOOGLE_CLIENT_SECRET=\"your-client-secret\"\n",[237,326,328,329],{"id":327},"configure-serverauthconfigts","Configure ",[282,330,331],{},"server\u002Fauth.config.ts",[275,333,337],{"className":334,"code":335,"filename":331,"language":336,"meta":280,"style":280},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","import { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n\nexport default defineServerAuth({\n  socialProviders: {\n    google: {\n      clientId: process.env.GOOGLE_CLIENT_ID as string,\n      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,\n    },\n  },\n})\n","ts",[282,338,339,363,369,386,399,409,444,469,475,481],{"__ignoreMap":280},[285,340,341,345,349,353,356,359],{"class":287,"line":288},[285,342,344],{"class":343},"sqe1H","import",[285,346,348],{"class":347},"s17Py"," { ",[285,350,352],{"class":351},"sYvLG","defineServerAuth",[285,354,355],{"class":347}," } ",[285,357,358],{"class":343},"from",[285,360,362],{"class":361},"sPAZv"," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[285,364,365],{"class":287,"line":321},[285,366,368],{"emptyLinePlaceholder":367},true,"\n",[285,370,372,375,379,383],{"class":287,"line":371},3,[285,373,374],{"class":343},"export",[285,376,378],{"class":377},"sKg8T"," default",[285,380,382],{"class":381},"sfT9l"," defineServerAuth",[285,384,385],{"class":347},"({\n",[285,387,389,392,396],{"class":287,"line":388},4,[285,390,391],{"class":351},"  socialProviders",[285,393,395],{"class":394},"sVnqq",":",[285,397,398],{"class":347}," {\n",[285,400,402,405,407],{"class":287,"line":401},5,[285,403,404],{"class":351},"    google",[285,406,395],{"class":394},[285,408,398],{"class":347},[285,410,412,415,417,421,424,427,429,433,437,441],{"class":287,"line":411},6,[285,413,414],{"class":351},"      clientId",[285,416,395],{"class":394},[285,418,420],{"class":419},"svFNh"," process",[285,422,423],{"class":347},".",[285,425,426],{"class":351},"env",[285,428,423],{"class":347},[285,430,432],{"class":431},"s6Rhl","GOOGLE_CLIENT_ID",[285,434,436],{"class":435},"snT_2"," as",[285,438,440],{"class":439},"sr8De"," string",[285,442,443],{"class":347},",\n",[285,445,447,450,452,454,456,458,460,463,465,467],{"class":287,"line":446},7,[285,448,449],{"class":351},"      clientSecret",[285,451,395],{"class":394},[285,453,420],{"class":419},[285,455,423],{"class":347},[285,457,426],{"class":351},[285,459,423],{"class":347},[285,461,462],{"class":431},"GOOGLE_CLIENT_SECRET",[285,464,436],{"class":435},[285,466,440],{"class":439},[285,468,443],{"class":347},[285,470,472],{"class":287,"line":471},8,[285,473,474],{"class":347},"    },\n",[285,476,478],{"class":287,"line":477},9,[285,479,480],{"class":347},"  },\n",[285,482,484],{"class":287,"line":483},10,[285,485,486],{"class":347},"})\n",[237,488,490],{"id":489},"add-a-sign-in-button","Add a Sign-In Button",[275,492,497],{"className":493,"code":494,"filename":495,"language":496,"meta":280,"style":280},"language-vue shiki shiki-themes one-light synthwave-84 synthwave-84","\u003Cscript setup lang=\"ts\">\ndefinePageMeta({ auth: 'guest' })\nconst signInSocial = useSignIn('social')\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton\n    type=\"button\"\n    @click=\"signInSocial.execute({ provider: 'google' })\"\n  >\n    Continue with Google\n  \u003C\u002Fbutton>\n\u003C\u002Ftemplate>\n","pages\u002Flogin.vue","vue",[282,498,499,526,546,570,579,583,592,600,610,620,625,631,642],{"__ignoreMap":280},[285,500,501,505,509,513,516,520,523],{"class":287,"line":288},[285,502,504],{"class":503},"sL9le","\u003C",[285,506,508],{"class":507},"stweg","script",[285,510,512],{"class":511},"s0frj"," setup",[285,514,515],{"class":511}," lang",[285,517,519],{"class":518},"sNM9w","=",[285,521,522],{"class":361},"\"ts\"",[285,524,525],{"class":503},">\n",[285,527,528,531,535,538,540,543],{"class":287,"line":321},[285,529,530],{"class":381},"definePageMeta",[285,532,534],{"class":533},"sEEOt","({ ",[285,536,537],{"class":351},"auth",[285,539,395],{"class":394},[285,541,542],{"class":361}," 'guest'",[285,544,545],{"class":533}," })\n",[285,547,548,551,554,558,561,564,567],{"class":287,"line":371},[285,549,550],{"class":343},"const",[285,552,553],{"class":431}," signInSocial",[285,555,557],{"class":556},"sQBpM"," =",[285,559,560],{"class":381}," useSignIn",[285,562,563],{"class":533},"(",[285,565,566],{"class":361},"'social'",[285,568,569],{"class":533},")\n",[285,571,572,575,577],{"class":287,"line":388},[285,573,574],{"class":503},"\u003C\u002F",[285,576,508],{"class":507},[285,578,525],{"class":503},[285,580,581],{"class":287,"line":401},[285,582,368],{"emptyLinePlaceholder":367},[285,584,585,587,590],{"class":287,"line":411},[285,586,504],{"class":503},[285,588,589],{"class":507},"template",[285,591,525],{"class":503},[285,593,594,597],{"class":287,"line":446},[285,595,596],{"class":503},"  \u003C",[285,598,599],{"class":507},"button\n",[285,601,602,605,607],{"class":287,"line":471},[285,603,604],{"class":511},"    type",[285,606,519],{"class":518},[285,608,609],{"class":361},"\"button\"\n",[285,611,612,615,617],{"class":287,"line":477},[285,613,614],{"class":511},"    @click",[285,616,519],{"class":518},[285,618,619],{"class":361},"\"signInSocial.execute({ provider: 'google' })\"\n",[285,621,622],{"class":287,"line":483},[285,623,624],{"class":503},"  >\n",[285,626,628],{"class":287,"line":627},11,[285,629,630],{"class":533},"    Continue with Google\n",[285,632,634,637,640],{"class":287,"line":633},12,[285,635,636],{"class":503},"  \u003C\u002F",[285,638,639],{"class":507},"button",[285,641,525],{"class":503},[285,643,645,647,649],{"class":287,"line":644},13,[285,646,574],{"class":503},[285,648,589],{"class":507},[285,650,525],{"class":503},[652,653,654,655,658,659,662,663,666,667,670,671,674,675,678,679,682],"tip",{},"For redirect OAuth methods exposed by your Better Auth client, including ",[282,656,657],{},"useSignIn('social')"," and ",[282,660,661],{},"useSignIn('oauth2')",", Better Auth handles the browser redirect to the provider.\nNo manual ",[282,664,665],{},"fetchSession","\u002F",[282,668,669],{},"waitForSession"," step is needed before that redirect.\n",[282,672,673],{},"callbackURL"," is optional. When your app configures ",[282,676,677],{},"auth.redirects.authenticated"," (or has a safe ",[282,680,681],{},"?redirect="," query), the module can use that as the fallback callback URL.",[684,685,686,689,701],"important",{},[222,687,688],{},"OAuth can work without a database using stateless (JWE) session cookies, but there are tradeoffs:",[690,691,692,695,698],"ul",{},[245,693,694],{},"No persistent account\u002Fsession management (cannot list or revoke sessions)",[245,696,697],{},"Limited server-side visibility into linked accounts",[245,699,700],{},"You must accept that account state lives in encrypted cookies",[222,702,703],{},"If you need durable account records or admin\u002Fsession management, use a database-backed setup.",[705,706,708],"h2",{"id":707},"other-providers","Other Providers",[222,710,711],{},"Better Auth supports 20+ providers (Apple, Discord, Facebook, etc). The pattern is identical:",[242,713,714,717,729,734],{},[245,715,716],{},"Create OAuth app, get client ID\u002Fsecret",[245,718,719,720,658,723,726,727],{},"Add ",[282,721,722],{},"{PROVIDER}_CLIENT_ID",[282,724,725],{},"{PROVIDER}_CLIENT_SECRET"," to ",[282,728,310],{},[245,730,731,732],{},"Reference credentials in ",[282,733,331],{},[245,735,736,737],{},"Call ",[282,738,739],{},"useSignIn('social').execute({ provider: 'providerId' })",[229,741],{"title":742,"to":743},"Full provider list","https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fauthentication\u002Fother-social-providers",[705,745,747],{"id":746},"generic-oauth","Generic OAuth",[222,749,750,751,758,759,762],{},"When your configured Better Auth client exposes the ",[249,752,755],{"href":753,"rel":754},"https:\u002F\u002Fwww.better-auth.com\u002Fdocs\u002Fplugins\u002Fgeneric-oauth",[253],[282,756,757],{},"genericOAuth"," flow through ",[282,760,761],{},"signIn.oauth2",", use the matching keyed composable:",[275,764,766],{"className":334,"code":765,"language":336,"meta":280,"style":280},"const signInOAuth2 = useSignIn('oauth2')\nawait signInOAuth2.execute({ providerId: 'seznam', callbackURL: '\u002Fapp' })\n",[282,767,768,786],{"__ignoreMap":280},[285,769,770,772,775,777,779,781,784],{"class":287,"line":288},[285,771,550],{"class":343},[285,773,774],{"class":431}," signInOAuth2",[285,776,557],{"class":556},[285,778,560],{"class":381},[285,780,563],{"class":347},[285,782,783],{"class":361},"'oauth2'",[285,785,569],{"class":347},[285,787,788,791,793,795,798,800,803,805,808,811,813,815,818],{"class":287,"line":321},[285,789,790],{"class":343},"await",[285,792,774],{"class":419},[285,794,423],{"class":347},[285,796,797],{"class":381},"execute",[285,799,534],{"class":347},[285,801,802],{"class":351},"providerId",[285,804,395],{"class":394},[285,806,807],{"class":361}," 'seznam'",[285,809,810],{"class":347},", ",[285,812,673],{"class":351},[285,814,395],{"class":394},[285,816,817],{"class":361}," '\u002Fapp'",[285,819,545],{"class":347},[222,821,822,823,825,826,829,830,833],{},"Redirect session-sync is skipped the same way as ",[282,824,657],{},": the first request only returns ",[282,827,828],{},"{ url, redirect: true }",", and the session is created after the provider callback. Pass ",[282,831,832],{},"disableRedirect: true"," when you handle the redirect yourself (popup or manual navigation); that path still syncs the session.",[835,836,837],"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 .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}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 .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 .s6Rhl, html code.shiki .s6Rhl{--shiki-light:#986801;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .snT_2, html code.shiki .snT_2{--shiki-light:#383A42;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sr8De, html code.shiki .sr8De{--shiki-light:#0184BC;--shiki-default:#FE4450;--shiki-dark:#FE4450}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 .sQBpM, html code.shiki .sQBpM{--shiki-light:#0184BC;--shiki-default:#FFFFFFEE;--shiki-dark:#FFFFFFEE}",{"title":280,"searchDepth":321,"depth":321,"links":839},[840,841,842,844,845,846],{"id":239,"depth":371,"text":240},{"id":304,"depth":371,"text":305},{"id":327,"depth":371,"text":843},"Configure server\u002Fauth.config.ts",{"id":489,"depth":371,"text":490},{"id":707,"depth":321,"text":708},{"id":746,"depth":321,"text":747},"Configure OAuth providers and sign in with `useSignIn('social')`.","md",null,{},{"title":83,"description":847},"ClEnHvK1cDaChoqKQvx0sHoG8kIk_XE0BLEsd_9ljRg",[854,856],{"title":78,"path":79,"stem":80,"description":855,"icon":81,"children":-1},"Resolve module setup and schema generation failures using their diagnostic codes.",{"title":87,"path":88,"stem":89,"description":857,"children":-1},"Use your own database with Drizzle, Prisma, or Kysely adapters.",1792535506102]