[{"data":1,"prerenderedAt":583},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Ftokens":178,"\u002Fintegrations\u002Ftokens-surround":578},[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":180,"body":181,"description":571,"extension":572,"links":573,"meta":574,"navigation":575,"path":140,"seo":576,"stem":141,"__hash__":577},"docs\u002F5.integrations\u002F3.tokens.md","Tokens for apps and services",{"type":182,"value":183,"toc":567},"minimark",[184,188,277,282,298,416,422,428,432,447,513,550,557,563],[185,186,187],"p",{},"Two of Better Auth's plugins, for clients that can't use the session cookie.",[189,190,196],"pre",{"className":191,"code":192,"filename":193,"language":194,"meta":195,"style":195},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  betterAuthUi: {\n    bearer: true,\n    jwt: true\n  }\n})\n","nuxt.config.ts","ts","",[197,198,199,223,236,251,262,268],"code",{"__ignoreMap":195},[200,201,204,208,211,215,219],"span",{"class":202,"line":203},"line",1,[200,205,207],{"class":206},"s7zQu","export",[200,209,210],{"class":206}," default",[200,212,214],{"class":213},"s2Zo4"," defineNuxtConfig",[200,216,218],{"class":217},"sTEyZ","(",[200,220,222],{"class":221},"sMK4o","{\n",[200,224,226,230,233],{"class":202,"line":225},2,[200,227,229],{"class":228},"swJcz","  betterAuthUi",[200,231,232],{"class":221},":",[200,234,235],{"class":221}," {\n",[200,237,239,242,244,248],{"class":202,"line":238},3,[200,240,241],{"class":228},"    bearer",[200,243,232],{"class":221},[200,245,247],{"class":246},"sfNiH"," true",[200,249,250],{"class":221},",\n",[200,252,254,257,259],{"class":202,"line":253},4,[200,255,256],{"class":228},"    jwt",[200,258,232],{"class":221},[200,260,261],{"class":246}," true\n",[200,263,265],{"class":202,"line":264},5,[200,266,267],{"class":221},"  }\n",[200,269,271,274],{"class":202,"line":270},6,[200,272,273],{"class":221},"}",[200,275,276],{"class":217},")\n",[278,279,281],"h2",{"id":280},"bearer-tokens","Bearer tokens",[185,283,284,285,289,290,293,294,297],{},"For native apps, other servers, and ",[286,287,288],"a",{"href":70},"signed-in devices",". Every sign-in returns the session token\nin a ",[197,291,292],{},"set-auth-token"," response header. Send it back as ",[197,295,296],{},"Authorization: Bearer \u003Ctoken>",", and Better Auth treats it as the\nsession:",[189,299,302],{"className":191,"code":300,"filename":301,"language":194,"meta":195,"style":195},"export default defineEventHandler(async (event) => {\n  \u002F\u002F Works with the cookie or the Authorization header.\n  const session = await serverAuth(event).api.getSession({ headers: event.headers })\n  return session?.user\n})\n","server\u002Fapi\u002Fme.get.ts",[197,303,304,334,340,397,410],{"__ignoreMap":195},[200,305,306,308,310,313,315,319,322,326,329,332],{"class":202,"line":203},[200,307,207],{"class":206},[200,309,210],{"class":206},[200,311,312],{"class":213}," defineEventHandler",[200,314,218],{"class":217},[200,316,318],{"class":317},"spNyl","async",[200,320,321],{"class":221}," (",[200,323,325],{"class":324},"sHdIc","event",[200,327,328],{"class":221},")",[200,330,331],{"class":317}," =>",[200,333,235],{"class":221},[200,335,336],{"class":202,"line":225},[200,337,339],{"class":338},"sHwdD","  \u002F\u002F Works with the cookie or the Authorization header.\n",[200,341,342,345,348,351,354,357,359,361,363,366,369,371,374,376,379,382,384,387,389,392,395],{"class":202,"line":238},[200,343,344],{"class":317},"  const",[200,346,347],{"class":217}," session",[200,349,350],{"class":221}," =",[200,352,353],{"class":206}," await",[200,355,356],{"class":213}," serverAuth",[200,358,218],{"class":228},[200,360,325],{"class":217},[200,362,328],{"class":228},[200,364,365],{"class":221},".",[200,367,368],{"class":217},"api",[200,370,365],{"class":221},[200,372,373],{"class":213},"getSession",[200,375,218],{"class":228},[200,377,378],{"class":221},"{",[200,380,381],{"class":228}," headers",[200,383,232],{"class":221},[200,385,386],{"class":217}," event",[200,388,365],{"class":221},[200,390,391],{"class":217},"headers",[200,393,394],{"class":221}," }",[200,396,276],{"class":228},[200,398,399,402,404,407],{"class":202,"line":253},[200,400,401],{"class":206},"  return",[200,403,347],{"class":217},[200,405,406],{"class":221},"?.",[200,408,409],{"class":217},"user\n",[200,411,412,414],{"class":202,"line":264},[200,413,273],{"class":221},[200,415,276],{"class":217},[185,417,418,421],{},[197,419,420],{},"bearer: { requireSignature: true }"," accepts only signed tokens. No migration needed.",[423,424,425],"warning",{},[185,426,427],{},"Better Auth advises using bearer tokens only for clients that can't use cookies.",[278,429,431],{"id":430},"jwts","JWTs",[185,433,434,435,438,439,442,443,446],{},"For other services that need to know who's signed in, without asking your app. ",[197,436,437],{},"GET \u002Fapi\u002Fauth\u002Ftoken"," (or the\n",[197,440,441],{},"set-auth-jwt"," header on get-session) gives a short-lived JWT with the user in its payload. Services verify it with\nyour public keys at ",[197,444,445],{},"\u002Fapi\u002Fauth\u002Fjwks",", which the admin's configuration page shows.",[189,448,450],{"className":191,"code":449,"filename":193,"language":194,"meta":195,"style":195},"export default defineNuxtConfig({\n  betterAuthUi: {\n    jwt: {\n      expirationTime: '15m'\n    }\n  }\n})\n",[197,451,452,464,472,480,497,502,506],{"__ignoreMap":195},[200,453,454,456,458,460,462],{"class":202,"line":203},[200,455,207],{"class":206},[200,457,210],{"class":206},[200,459,214],{"class":213},[200,461,218],{"class":217},[200,463,222],{"class":221},[200,465,466,468,470],{"class":202,"line":225},[200,467,229],{"class":228},[200,469,232],{"class":221},[200,471,235],{"class":221},[200,473,474,476,478],{"class":202,"line":238},[200,475,256],{"class":228},[200,477,232],{"class":221},[200,479,235],{"class":221},[200,481,482,485,487,490,494],{"class":202,"line":253},[200,483,484],{"class":228},"      expirationTime",[200,486,232],{"class":221},[200,488,489],{"class":221}," '",[200,491,493],{"class":492},"sfazB","15m",[200,495,496],{"class":221},"'\n",[200,498,499],{"class":202,"line":264},[200,500,501],{"class":221},"    }\n",[200,503,504],{"class":202,"line":270},[200,505,267],{"class":221},[200,507,509,511],{"class":202,"line":508},7,[200,510,273],{"class":221},[200,512,276],{"class":217},[514,515,516,524,530,543],"field-group",{},[517,518,521],"field",{"name":519,"type":520},"issuer","string",[185,522,523],{},"Who issues the tokens. Defaults to your app's base URL.",[517,525,527],{"name":526,"type":520},"audience",[185,528,529],{},"Who the tokens are for. Defaults to your app's base URL.",[517,531,534],{"name":532,"type":520,"default":533},"expirationTime","'15m'",[185,535,536,537,539,540,365],{},"How long a token lasts, for example ",[197,538,533],{}," or ",[197,541,542],{},"'1h'",[517,544,547],{"name":545,"type":520,"default":546},"jwksPath","'\u002Fjwks'",[185,548,549],{},"Where the public keys are, under Better Auth's base path.",[185,551,552,553,556],{},"Run Better Auth's migrations after turning it on: it adds a ",[197,554,555],{},"jwks"," table.",[558,559,560],"note",{},[185,561,562],{},"A JWT isn't a replacement for the session, as Better Auth says: use it for services, not for your own pages.",[564,565,566],"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 .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}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":195,"searchDepth":203,"depth":225,"links":568},[569,570],{"id":280,"depth":225,"text":281},{"id":430,"depth":225,"text":431},"Bearer tokens for native apps, and JWTs for other services.","md",null,{},{"title":139,"icon":142},{"title":180,"description":571},"ZWuAXJtDTmjmD1q2FwxJpwhsECjsBOPZTFkqqKxZWH4",[579,581],{"title":134,"path":135,"stem":136,"description":580,"icon":137,"children":-1},"Keys for people's scripts, bots and integrations, with permissions.",{"title":149,"path":150,"stem":151,"description":582,"icon":152,"children":-1},"Send Better Auth's emails through your own provider, with your own templates.",1793019844940]