[{"data":1,"prerenderedAt":862},["ShallowReactive",2],{"navigation":3,"\u002Fsign-in\u002Fproviders":178,"\u002Fsign-in\u002Fproviders-surround":857},[4,23,78,95,123,143,158],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"Sign-in","\u002Fsign-in","2.sign-in",[28,33,38,43,48,53,58,63,68,73],{"title":29,"path":30,"stem":31,"icon":32},"Sign-in pages","\u002Fsign-in\u002Fpages","2.sign-in\u002F1.pages","i-lucide-log-in",{"title":34,"path":35,"stem":36,"icon":37},"Several accounts","\u002Fsign-in\u002Fmulti-session","2.sign-in\u002F10.multi-session","i-lucide-users-round",{"title":39,"path":40,"stem":41,"icon":42},"Account page","\u002Fsign-in\u002Faccount","2.sign-in\u002F2.account","i-lucide-circle-user",{"title":44,"path":45,"stem":46,"icon":47},"Other methods","\u002Fsign-in\u002Fmethods","2.sign-in\u002F3.methods","i-lucide-key-square",{"title":49,"path":50,"stem":51,"icon":52},"Sign-in providers","\u002Fsign-in\u002Fproviders","2.sign-in\u002F4.providers","i-lucide-share-2",{"title":54,"path":55,"stem":56,"icon":57},"Two-factor","\u002Fsign-in\u002Ftwo-factor","2.sign-in\u002F5.two-factor","i-lucide-shield-check",{"title":59,"path":60,"stem":61,"icon":62},"Passkeys","\u002Fsign-in\u002Fpasskeys","2.sign-in\u002F6.passkeys","i-lucide-fingerprint",{"title":64,"path":65,"stem":66,"icon":67},"Phone numbers","\u002Fsign-in\u002Fphone-numbers","2.sign-in\u002F7.phone-numbers","i-lucide-smartphone",{"title":69,"path":70,"stem":71,"icon":72},"Signing in devices","\u002Fsign-in\u002Fdevices","2.sign-in\u002F8.devices","i-lucide-tv",{"title":74,"path":75,"stem":76,"icon":77},"Security","\u002Fsign-in\u002Fsecurity","2.sign-in\u002F9.security","i-lucide-lock-keyhole",{"title":79,"path":80,"stem":81,"children":82,"icon":22},"Organizations","\u002Forganizations","3.organizations\u002F1.index",[83,85,90],{"title":79,"path":80,"stem":81,"icon":84},"i-lucide-building-2",{"title":86,"path":87,"stem":88,"icon":89},"Roles","\u002Forganizations\u002Froles","3.organizations\u002F2.roles","i-lucide-shield",{"title":91,"path":92,"stem":93,"icon":94},"Single sign-on","\u002Forganizations\u002Fsso","3.organizations\u002F3.sso","i-lucide-key-round",{"title":96,"path":97,"stem":98,"children":99,"icon":22},"Admin dashboard","\u002Fadmin","4.admin\u002F1.index",[100,103,108,113,118],{"title":101,"path":97,"stem":98,"icon":102},"Overview","i-lucide-layout-dashboard",{"title":104,"path":105,"stem":106,"icon":107},"Managing users","\u002Fadmin\u002Fusers","4.admin\u002F2.users","i-lucide-user-cog",{"title":109,"path":110,"stem":111,"icon":112},"Staff roles","\u002Fadmin\u002Froles","4.admin\u002F3.roles","i-lucide-shield-user",{"title":114,"path":115,"stem":116,"icon":117},"Audit log","\u002Fadmin\u002Faudit-log","4.admin\u002F4.audit-log","i-lucide-history",{"title":119,"path":120,"stem":121,"icon":122},"Your own pages","\u002Fadmin\u002Fextending","4.admin\u002F5.extending","i-lucide-layout-panel-left",{"title":124,"icon":22,"path":125,"stem":126,"children":127,"page":22},"Integrations","\u002Fintegrations","5.integrations",[128,133,138],{"title":129,"path":130,"stem":131,"icon":132},"Stripe","\u002Fintegrations\u002Fstripe","5.integrations\u002F1.stripe","i-simple-icons-stripe",{"title":134,"path":135,"stem":136,"icon":137},"API keys","\u002Fintegrations\u002Fapi-keys","5.integrations\u002F2.api-keys","i-lucide-key",{"title":139,"path":140,"stem":141,"icon":142},"Tokens","\u002Fintegrations\u002Ftokens","5.integrations\u002F3.tokens","i-lucide-ticket",{"title":144,"icon":22,"path":145,"stem":146,"children":147,"page":22},"Customization","\u002Fcustomization","6.customization",[148,153],{"title":149,"path":150,"stem":151,"icon":152},"Emails","\u002Fcustomization\u002Femails","6.customization\u002F1.emails","i-lucide-mail",{"title":154,"path":155,"stem":156,"icon":157},"Languages","\u002Fcustomization\u002Flanguages","6.customization\u002F2.languages","i-lucide-languages",{"title":159,"icon":22,"path":160,"stem":161,"children":162,"page":22},"Reference","\u002Freference","7.reference",[163,168,173],{"title":164,"path":165,"stem":166,"icon":167},"How it works","\u002Freference\u002Fhow-it-works","7.reference\u002F1.how-it-works","i-lucide-cog",{"title":169,"path":170,"stem":171,"icon":172},"API reference","\u002Freference\u002Fapi","7.reference\u002F2.api","i-lucide-braces",{"title":174,"path":175,"stem":176,"icon":177},"Contributing","\u002Freference\u002Fcontributing","7.reference\u002F3.contributing","i-lucide-git-pull-request",{"id":179,"title":49,"body":180,"description":850,"extension":851,"links":852,"meta":853,"navigation":854,"path":50,"seo":855,"stem":51,"__hash__":856},"docs\u002F2.sign-in\u002F4.providers.md",{"type":181,"value":182,"toc":844},"minimark",[183,188,192,221,224,349,352,355,360,367,601,612,618,622,629,652,659,665,752,756,763,811,822,826,840],[184,185],"screenshot",{"alt":186,"name":187},"The account page's security tab: passkeys, two-factor, and sign-in methods with Google, GitHub, Discord and Apple to connect","account-security",[189,190,191],"p",{},"The sign-in, sign-up and account pages offer every provider in your Better Auth config:",[193,194,195,212],"ul",{},[196,197,198,199,206,207,211],"li",{},"Better Auth's ",[200,201,205],"a",{"href":202,"rel":203},"https:\u002F\u002Fbetter-auth.com\u002Fdocs\u002Fconcepts\u002Foauth",[204],"nofollow","social providers"," (",[208,209,210],"code",{},"socialProviders",");",[196,213,214,215,220],{},"the ",[200,216,219],{"href":217,"rel":218},"https:\u002F\u002Fbetter-auth.com\u002Fdocs\u002Fplugins\u002Fgeneric-oauth",[204],"Generic OAuth plugin","'s providers, which Better Auth\nsigns in and links the same way.",[189,222,223],{},"There's nothing to turn on in the module: configure a provider in Better Auth and it appears.",[225,226,232],"pre",{"className":227,"code":228,"filename":229,"language":230,"meta":231,"style":231},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineServerAuth({\n  socialProviders: {\n    github: {\n      clientId: process.env.GITHUB_CLIENT_ID!,\n      clientSecret: process.env.GITHUB_CLIENT_SECRET!\n    }\n  }\n})\n","server\u002Fauth.config.ts","ts","",[208,233,234,258,271,281,306,328,334,340],{"__ignoreMap":231},[235,236,239,243,246,250,254],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"s7zQu","export",[235,244,245],{"class":241}," default",[235,247,249],{"class":248},"s2Zo4"," defineServerAuth",[235,251,253],{"class":252},"sTEyZ","(",[235,255,257],{"class":256},"sMK4o","{\n",[235,259,261,265,268],{"class":237,"line":260},2,[235,262,264],{"class":263},"swJcz","  socialProviders",[235,266,267],{"class":256},":",[235,269,270],{"class":256}," {\n",[235,272,274,277,279],{"class":237,"line":273},3,[235,275,276],{"class":263},"    github",[235,278,267],{"class":256},[235,280,270],{"class":256},[235,282,284,287,289,292,295,298,300,303],{"class":237,"line":283},4,[235,285,286],{"class":263},"      clientId",[235,288,267],{"class":256},[235,290,291],{"class":252}," process",[235,293,294],{"class":256},".",[235,296,297],{"class":252},"env",[235,299,294],{"class":256},[235,301,302],{"class":252},"GITHUB_CLIENT_ID",[235,304,305],{"class":256},"!,\n",[235,307,309,312,314,316,318,320,322,325],{"class":237,"line":308},5,[235,310,311],{"class":263},"      clientSecret",[235,313,267],{"class":256},[235,315,291],{"class":252},[235,317,294],{"class":256},[235,319,297],{"class":252},[235,321,294],{"class":256},[235,323,324],{"class":252},"GITHUB_CLIENT_SECRET",[235,326,327],{"class":256},"!\n",[235,329,331],{"class":237,"line":330},6,[235,332,333],{"class":256},"    }\n",[235,335,337],{"class":237,"line":336},7,[235,338,339],{"class":256},"  }\n",[235,341,343,346],{"class":237,"line":342},8,[235,344,345],{"class":256},"}",[235,347,348],{"class":252},")\n",[189,350,351],{},"Each provider shows with its own icon and name: Google, GitHub, Discord, Apple, Microsoft, Facebook, X, GitLab,\nTwitch, Roblox, Kick, Spotify, LinkedIn, Reddit, TikTok, Slack, Zoom, Epic Games and Battle.net. Others show their id.",[189,353,354],{},"On the account page, people connect more providers and disconnect them, but never the last way they have to sign in.",[356,357,359],"h2",{"id":358},"epic-games-and-battlenet","Epic Games and Battle.net",[189,361,362,363,366],{},"Better Auth has no helper for these, so ",[208,364,365],{},"@treygrr\u002Fnuxt-better-auth-ui\u002Fproviders"," has Generic OAuth configs for them:",[225,368,370],{"className":227,"code":369,"filename":229,"language":230,"meta":231,"style":231},"import { genericOAuth } from 'better-auth\u002Fplugins'\nimport { battleNet, epicGames } from '@treygrr\u002Fnuxt-better-auth-ui\u002Fproviders'\n\nexport default defineServerAuth({\n  plugins: [\n    genericOAuth({\n      config: [\n        epicGames({ clientId: process.env.EPIC_CLIENT_ID!, clientSecret: process.env.EPIC_CLIENT_SECRET! }),\n        battleNet({ clientId: process.env.BNET_CLIENT_ID!, clientSecret: process.env.BNET_CLIENT_SECRET! })\n      ]\n    })\n  ]\n})\n",[208,371,372,399,424,430,442,452,461,470,526,574,580,588,594],{"__ignoreMap":231},[235,373,374,377,380,383,386,389,392,396],{"class":237,"line":238},[235,375,376],{"class":241},"import",[235,378,379],{"class":256}," {",[235,381,382],{"class":252}," genericOAuth",[235,384,385],{"class":256}," }",[235,387,388],{"class":241}," from",[235,390,391],{"class":256}," '",[235,393,395],{"class":394},"sfazB","better-auth\u002Fplugins",[235,397,398],{"class":256},"'\n",[235,400,401,403,405,408,411,414,416,418,420,422],{"class":237,"line":260},[235,402,376],{"class":241},[235,404,379],{"class":256},[235,406,407],{"class":252}," battleNet",[235,409,410],{"class":256},",",[235,412,413],{"class":252}," epicGames",[235,415,385],{"class":256},[235,417,388],{"class":241},[235,419,391],{"class":256},[235,421,365],{"class":394},[235,423,398],{"class":256},[235,425,426],{"class":237,"line":273},[235,427,429],{"emptyLinePlaceholder":428},true,"\n",[235,431,432,434,436,438,440],{"class":237,"line":283},[235,433,242],{"class":241},[235,435,245],{"class":241},[235,437,249],{"class":248},[235,439,253],{"class":252},[235,441,257],{"class":256},[235,443,444,447,449],{"class":237,"line":308},[235,445,446],{"class":263},"  plugins",[235,448,267],{"class":256},[235,450,451],{"class":252}," [\n",[235,453,454,457,459],{"class":237,"line":330},[235,455,456],{"class":248},"    genericOAuth",[235,458,253],{"class":252},[235,460,257],{"class":256},[235,462,463,466,468],{"class":237,"line":336},[235,464,465],{"class":263},"      config",[235,467,267],{"class":256},[235,469,451],{"class":252},[235,471,472,475,477,480,483,485,487,489,491,493,496,499,502,504,506,508,510,512,515,518,520,523],{"class":237,"line":342},[235,473,474],{"class":248},"        epicGames",[235,476,253],{"class":252},[235,478,479],{"class":256},"{",[235,481,482],{"class":263}," clientId",[235,484,267],{"class":256},[235,486,291],{"class":252},[235,488,294],{"class":256},[235,490,297],{"class":252},[235,492,294],{"class":256},[235,494,495],{"class":252},"EPIC_CLIENT_ID",[235,497,498],{"class":256},"!,",[235,500,501],{"class":263}," clientSecret",[235,503,267],{"class":256},[235,505,291],{"class":252},[235,507,294],{"class":256},[235,509,297],{"class":252},[235,511,294],{"class":256},[235,513,514],{"class":252},"EPIC_CLIENT_SECRET",[235,516,517],{"class":256},"!",[235,519,385],{"class":256},[235,521,522],{"class":252},")",[235,524,525],{"class":256},",\n",[235,527,529,532,534,536,538,540,542,544,546,548,551,553,555,557,559,561,563,565,568,570,572],{"class":237,"line":528},9,[235,530,531],{"class":248},"        battleNet",[235,533,253],{"class":252},[235,535,479],{"class":256},[235,537,482],{"class":263},[235,539,267],{"class":256},[235,541,291],{"class":252},[235,543,294],{"class":256},[235,545,297],{"class":252},[235,547,294],{"class":256},[235,549,550],{"class":252},"BNET_CLIENT_ID",[235,552,498],{"class":256},[235,554,501],{"class":263},[235,556,267],{"class":256},[235,558,291],{"class":252},[235,560,294],{"class":256},[235,562,297],{"class":252},[235,564,294],{"class":256},[235,566,567],{"class":252},"BNET_CLIENT_SECRET",[235,569,517],{"class":256},[235,571,385],{"class":256},[235,573,348],{"class":252},[235,575,577],{"class":237,"line":576},10,[235,578,579],{"class":252},"      ]\n",[235,581,583,586],{"class":237,"line":582},11,[235,584,585],{"class":256},"    }",[235,587,348],{"class":252},[235,589,591],{"class":237,"line":590},12,[235,592,593],{"class":252},"  ]\n",[235,595,597,599],{"class":237,"line":596},13,[235,598,345],{"class":256},[235,600,348],{"class":252},[189,602,603,604,607,608,611],{},"Their redirect URLs are ",[208,605,606],{},"https:\u002F\u002Fyour-site\u002Fapi\u002Fauth\u002Fcallback\u002Fepic-games"," and ",[208,609,610],{},"https:\u002F\u002Fyour-site\u002Fapi\u002Fauth\u002Fcallback\u002Fbattle-net",".\nNames come from the Epic display name and the BattleTag.",[613,614,615],"warning",{},[189,616,617],{},"The helpers follow Epic's and Blizzard's published OpenID set-up, but haven't been tried against the real services yet.",[356,619,621],{"id":620},"providers-without-an-email","Providers without an email",[189,623,624,628],{},[625,626,627],"strong",{},"Neither Epic Games nor Battle.net shares an email",", and Better Auth needs one per user. So:",[630,631,632,639,649],"ol",{},[196,633,634,635,638],{},"The helpers give these accounts a placeholder email, ",[208,636,637],{},"\u003Cid>.\u003Cprovider>@no-email.invalid",". It's a reserved domain\nthat's never emailed.",[196,640,641,642,206,645,648],{},"The module sends these users to the ",[625,643,644],{},"finish-account page",[208,646,647],{},"\u002Ffinish-account",") before anything else.",[196,650,651],{},"They add their email there, through Better Auth's change-email, which emails them a link. Opening it makes the\nemail theirs.",[189,653,654,655,658],{},"The finish-account page needs ",[208,656,657],{},"user.changeEmail.enabled"," and verification emails in your Better Auth config.",[189,660,661,662,267],{},"Your own providers without an email can do the same with ",[208,663,664],{},"placeholderEmail",[225,666,668],{"className":227,"code":667,"filename":229,"language":230,"meta":231,"style":231},"import { placeholderEmail } from '@treygrr\u002Fnuxt-better-auth-ui\u002Fproviders'\n\n\u002F\u002F In a Generic OAuth provider's getUserInfo:\nreturn { id, name, email: placeholderEmail('my-provider', id), emailVerified: false }\n",[208,669,670,689,693,699],{"__ignoreMap":231},[235,671,672,674,676,679,681,683,685,687],{"class":237,"line":238},[235,673,376],{"class":241},[235,675,379],{"class":256},[235,677,678],{"class":252}," placeholderEmail",[235,680,385],{"class":256},[235,682,388],{"class":241},[235,684,391],{"class":256},[235,686,365],{"class":394},[235,688,398],{"class":256},[235,690,691],{"class":237,"line":260},[235,692,429],{"emptyLinePlaceholder":428},[235,694,695],{"class":237,"line":273},[235,696,698],{"class":697},"sHwdD","\u002F\u002F In a Generic OAuth provider's getUserInfo:\n",[235,700,701,704,706,709,711,714,716,719,721,723,725,728,731,733,735,738,740,743,745,749],{"class":237,"line":283},[235,702,703],{"class":241},"return",[235,705,379],{"class":256},[235,707,708],{"class":252}," id",[235,710,410],{"class":256},[235,712,713],{"class":252}," name",[235,715,410],{"class":256},[235,717,718],{"class":263}," email",[235,720,267],{"class":256},[235,722,678],{"class":248},[235,724,253],{"class":252},[235,726,727],{"class":256},"'",[235,729,730],{"class":394},"my-provider",[235,732,727],{"class":256},[235,734,410],{"class":256},[235,736,737],{"class":252}," id)",[235,739,410],{"class":256},[235,741,742],{"class":263}," emailVerified",[235,744,267],{"class":256},[235,746,748],{"class":747},"sfNiH"," false",[235,750,751],{"class":256}," }\n",[356,753,755],{"id":754},"sign-in-in-a-popup","Sign-in in a popup",[189,757,758,759,762],{},"With ",[208,760,761],{},"oauthPopup: true",", the sign-in and sign-up pages open provider sign-ins in a popup instead of leaving the page.\nSomeone signing in from inside a running app keeps its state: the popup closes itself and the page moves on, signed\nin. Where the browser blocks popups, the usual redirect happens instead.",[225,764,767],{"className":227,"code":765,"filename":766,"language":230,"meta":231,"style":231},"export default defineNuxtConfig({\n  betterAuthUi: {\n    oauthPopup: true\n  }\n})\n","nuxt.config.ts",[208,768,769,782,791,801,805],{"__ignoreMap":231},[235,770,771,773,775,778,780],{"class":237,"line":238},[235,772,242],{"class":241},[235,774,245],{"class":241},[235,776,777],{"class":248}," defineNuxtConfig",[235,779,253],{"class":252},[235,781,257],{"class":256},[235,783,784,787,789],{"class":237,"line":260},[235,785,786],{"class":263},"  betterAuthUi",[235,788,267],{"class":256},[235,790,270],{"class":256},[235,792,793,796,798],{"class":237,"line":273},[235,794,795],{"class":263},"    oauthPopup",[235,797,267],{"class":256},[235,799,800],{"class":747}," true\n",[235,802,803],{"class":237,"line":283},[235,804,339],{"class":256},[235,806,807,809],{"class":237,"line":308},[235,808,345],{"class":256},[235,810,348],{"class":252},[812,813,814],"note",{},[189,815,816,817,821],{},"It's Better Auth's OAuth Popup plugin, which ships with Better Auth 1.7 but isn't in its documentation yet. The option\nalso adds the ",[200,818,820],{"href":819},"\u002Fintegrations\u002Ftokens#bearer-tokens","Bearer plugin",", which it pairs with. Users with two-factor on\nfinish signing in inside the popup.",[356,823,825],{"id":824},"not-supported-yet","Not supported yet",[193,827,828,834],{},[196,829,830,833],{},[625,831,832],{},"Xbox gamertags:"," they need Xbox Live's own token exchange after the Microsoft sign-in.",[196,835,836,839],{},[625,837,838],{},"Steam:"," it uses OpenID 2.0, which Better Auth doesn't support.",[841,842,843],"style",{},"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 pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":231,"searchDepth":238,"depth":260,"links":845},[846,847,848,849],{"id":358,"depth":260,"text":359},{"id":620,"depth":260,"text":621},{"id":754,"depth":260,"text":755},{"id":824,"depth":260,"text":825},"Google, GitHub, Discord and more, game platforms, and sign-in in a popup.","md",null,{},{"icon":52},{"title":49,"description":850},"tQUUqT44VBMApT6d8RgprPWUpCJYm2BP22oEpDCwyWU",[858,860],{"title":44,"path":45,"stem":46,"description":859,"icon":47,"children":-1},"Usernames, sign-in links, codes by email, and guest accounts.",{"title":54,"path":55,"stem":56,"description":861,"icon":57,"children":-1},"Authenticator apps, codes by email, backup codes, and requiring it for some roles.",1793019844208]