[{"data":1,"prerenderedAt":672},["ShallowReactive",2],{"navigation":3,"\u002Fsign-in\u002Fphone-numbers":178,"\u002Fsign-in\u002Fphone-numbers-surround":667},[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":64,"body":180,"description":660,"extension":661,"links":662,"meta":663,"navigation":664,"path":65,"seo":665,"stem":66,"__hash__":666},"docs\u002F2.sign-in\u002F7.phone-numbers.md",{"type":181,"value":182,"toc":654},"minimark",[183,199,204,478,482,515,519,522,532,596,600,639,650],[184,185,186,187,194,195,198],"p",{},"Better Auth's ",[188,189,193],"a",{"href":190,"rel":191},"https:\u002F\u002Fbetter-auth.com\u002Fdocs\u002Fplugins\u002Fphone-number",[192],"nofollow","Phone Number plugin",". Texts go through your own\nsender, the same way ",[188,196,197],{"href":150},"emails"," do.",[200,201,203],"h2",{"id":202},"turning-it-on","Turning it on",[205,206,208,213,327,331,334,463,467],"steps",{"level":207},"3",[209,210,212],"h3",{"id":211},"enable-it-and-point-at-your-sender","Enable it, and point at your sender",[214,215,221],"pre",{"className":216,"code":217,"filename":218,"language":219,"meta":220,"style":220},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  betterAuthUi: {\n    phoneNumber: { enabled: true },\n    sms: { send: '.\u002Fserver\u002Fsms\u002Fsend.ts' }\n  }\n})\n","nuxt.config.ts","ts","",[222,223,224,248,261,284,312,318],"code",{"__ignoreMap":220},[225,226,229,233,236,240,244],"span",{"class":227,"line":228},"line",1,[225,230,232],{"class":231},"s7zQu","export",[225,234,235],{"class":231}," default",[225,237,239],{"class":238},"s2Zo4"," defineNuxtConfig",[225,241,243],{"class":242},"sTEyZ","(",[225,245,247],{"class":246},"sMK4o","{\n",[225,249,251,255,258],{"class":227,"line":250},2,[225,252,254],{"class":253},"swJcz","  betterAuthUi",[225,256,257],{"class":246},":",[225,259,260],{"class":246}," {\n",[225,262,264,267,269,272,275,277,281],{"class":227,"line":263},3,[225,265,266],{"class":253},"    phoneNumber",[225,268,257],{"class":246},[225,270,271],{"class":246}," {",[225,273,274],{"class":253}," enabled",[225,276,257],{"class":246},[225,278,280],{"class":279},"sfNiH"," true",[225,282,283],{"class":246}," },\n",[225,285,287,290,292,294,297,299,302,306,309],{"class":227,"line":286},4,[225,288,289],{"class":253},"    sms",[225,291,257],{"class":246},[225,293,271],{"class":246},[225,295,296],{"class":253}," send",[225,298,257],{"class":246},[225,300,301],{"class":246}," '",[225,303,305],{"class":304},"sfazB",".\u002Fserver\u002Fsms\u002Fsend.ts",[225,307,308],{"class":246},"'",[225,310,311],{"class":246}," }\n",[225,313,315],{"class":227,"line":314},5,[225,316,317],{"class":246},"  }\n",[225,319,321,324],{"class":227,"line":320},6,[225,322,323],{"class":246},"}",[225,325,326],{"class":242},")\n",[209,328,330],{"id":329},"write-the-sender","Write the sender",[184,332,333],{},"Its default export delivers a text, for example with Twilio:",[214,335,338],{"className":216,"code":336,"filename":337,"language":219,"meta":220,"style":220},"import { defineBetterAuthSmsSender } from '@treygrr\u002Fnuxt-better-auth-ui\u002Fsms'\n\nexport default defineBetterAuthSmsSender(async ({ to, text }) => {\n  await twilio.messages.create({ to, from: '+15550000000', body: text })\n})\n","server\u002Fsms\u002Fsend.ts",[222,339,340,364,370,405,457],{"__ignoreMap":220},[225,341,342,345,347,350,353,356,358,361],{"class":227,"line":228},[225,343,344],{"class":231},"import",[225,346,271],{"class":246},[225,348,349],{"class":242}," defineBetterAuthSmsSender",[225,351,352],{"class":246}," }",[225,354,355],{"class":231}," from",[225,357,301],{"class":246},[225,359,360],{"class":304},"@treygrr\u002Fnuxt-better-auth-ui\u002Fsms",[225,362,363],{"class":246},"'\n",[225,365,366],{"class":227,"line":250},[225,367,369],{"emptyLinePlaceholder":368},true,"\n",[225,371,372,374,376,378,380,384,387,391,394,397,400,403],{"class":227,"line":263},[225,373,232],{"class":231},[225,375,235],{"class":231},[225,377,349],{"class":238},[225,379,243],{"class":242},[225,381,383],{"class":382},"spNyl","async",[225,385,386],{"class":246}," ({",[225,388,390],{"class":389},"sHdIc"," to",[225,392,393],{"class":246},",",[225,395,396],{"class":389}," text",[225,398,399],{"class":246}," })",[225,401,402],{"class":382}," =>",[225,404,260],{"class":246},[225,406,407,410,413,416,419,421,424,426,429,431,433,435,437,439,442,444,446,449,451,453,455],{"class":227,"line":286},[225,408,409],{"class":231},"  await",[225,411,412],{"class":242}," twilio",[225,414,415],{"class":246},".",[225,417,418],{"class":242},"messages",[225,420,415],{"class":246},[225,422,423],{"class":238},"create",[225,425,243],{"class":253},[225,427,428],{"class":246},"{",[225,430,390],{"class":242},[225,432,393],{"class":246},[225,434,355],{"class":253},[225,436,257],{"class":246},[225,438,301],{"class":246},[225,440,441],{"class":304},"+15550000000",[225,443,308],{"class":246},[225,445,393],{"class":246},[225,447,448],{"class":253}," body",[225,450,257],{"class":246},[225,452,396],{"class":242},[225,454,352],{"class":246},[225,456,326],{"class":253},[225,458,459,461],{"class":227,"line":314},[225,460,323],{"class":246},[225,462,326],{"class":242},[209,464,466],{"id":465},"run-better-auths-migrations","Run Better Auth's migrations",[184,468,469,470,473,474,477],{},"The plugin adds ",[222,471,472],{},"phoneNumber"," and ",[222,475,476],{},"phoneNumberVerified"," columns to the user table.",[200,479,481],{"id":480},"how-people-use-it","How people use it",[483,484,485,493,503,509],"ul",{},[486,487,488,492],"li",{},[489,490,491],"strong",{},"Sign-in page:"," \"Text code\" asks for the number, texts a code, and signs in with it. Spaces, dashes and brackets\nare dropped; people include their country code. Users with two-factor on are asked for their code next.",[486,494,495,498,499,502],{},[489,496,497],{},"New numbers:"," with ",[222,500,501],{},"signUp",", a code to a new number creates an account named after it. Without it, unknown\nnumbers are told to sign in another way and add their number from their account.",[486,504,505,508],{},[489,506,507],{},"Account page:"," a phone number card to add, change (verified with a code) or remove a number.",[486,510,511,514],{},[489,512,513],{},"Admin:"," staff see a user's number on their page.",[200,516,518],{"id":517},"the-texts","The texts",[184,520,521],{},"\"123456 is your App code. It expires in 5 minutes.\", in the pages' language. The code comes first, so phones offer to\nfill it in. Texts are sent in the background, as Better Auth advises.",[184,523,524,525,473,528,531],{},"Your sender gets more than ",[222,526,527],{},"to",[222,529,530],{},"text",", so it can write its own message:",[533,534,535,548],"table",{},[536,537,538],"thead",{},[539,540,541,545],"tr",{},[542,543,544],"th",{},"Field",[542,546,547],{},"What it is",[549,550,551,561,570,579],"tbody",{},[539,552,553,558],{},[554,555,556],"td",{},[222,557,527],{},[554,559,560],{},"The phone number",[539,562,563,567],{},[554,564,565],{},[222,566,530],{},[554,568,569],{},"The module's message",[539,571,572,576],{},[554,573,574],{},[222,575,222],{},[554,577,578],{},"The code itself",[539,580,581,586],{},[554,582,583],{},[222,584,585],{},"sms",[554,587,588,589,592,593],{},"Which text it is: ",[222,590,591],{},"phone-code"," (signing in, verifying a number) or ",[222,594,595],{},"phone-reset",[200,597,599],{"id":598},"options","Options",[601,602,603,609,618,626,633],"field-group",{},[604,605],"field",{"default":606,"name":607,"type":608},"false","enabled","boolean",[604,610,611],{"default":606,"name":501,"type":608},[184,612,613,614,617],{},"A code to a new number creates an account. Its generated email, ",[222,615,616],{},"\u003Cdigits>@phone-number.invalid",", is never emailed;\npeople can add a real one from their account.",[604,619,623],{"default":620,"name":621,"type":622},"6","otpLength","number",[184,624,625],{},"Digits in a code.",[604,627,630],{"default":628,"name":629,"type":622},"300","expiresIn",[184,631,632],{},"Seconds a code lasts.",[604,634,636],{"default":207,"name":635,"type":622},"allowedAttempts",[184,637,638],{},"Wrong tries before a code stops working.",[640,641,642],"warning",{},[184,643,644,645,649],{},"Texts cost money, and asking for a code texts any number. The ",[188,646,648],{"href":647},"\u002Fsign-in\u002Fsecurity#captcha","captcha"," guards it by\ndefault, alongside Better Auth's rate limits: keep it on.",[651,652,653],"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 pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":220,"searchDepth":228,"depth":250,"links":655},[656,657,658,659],{"id":202,"depth":250,"text":203},{"id":480,"depth":250,"text":481},{"id":517,"depth":250,"text":518},{"id":598,"depth":250,"text":599},"Sign in with a code by text, sent through your own SMS provider.","md",null,{},{"icon":67},{"title":64,"description":660},"6wJTcjP6pVItzlM6DAeKuixi8aEFO4gnlxgzm1NTjL0",[668,670],{"title":59,"path":60,"stem":61,"description":669,"icon":62,"children":-1},"Sign in with a fingerprint, face or PIN instead of a password.",{"title":69,"path":70,"stem":71,"description":671,"icon":72,"children":-1},"Sign in TVs, consoles, CLIs and desktop apps with a code.",1793019844377]