[{"data":1,"prerenderedAt":1114},["ShallowReactive",2],{"navigation":3,"\u002Fsanctum\u002Ftwo-factor":170,"\u002Fsanctum\u002Ftwo-factor-surround":1109},[4,18,43,75,103,120,134],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-simple-icons-laravel",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Sanctum","\u002Fsanctum","2.sanctum",[23,28,33,38],{"title":24,"path":25,"stem":26,"icon":27},"Configuration","\u002Fsanctum\u002Fconfiguration","2.sanctum\u002F1.configuration","i-lucide-cog",{"title":29,"path":30,"stem":31,"icon":32},"Cookie Authentication","\u002Fsanctum\u002Fcookie","2.sanctum\u002F2.cookie","i-lucide-cookie",{"title":34,"path":35,"stem":36,"icon":37},"Sanctum 2FA Flow","\u002Fsanctum\u002Ftwo-factor","2.sanctum\u002F3.two-factor","i-lucide-shield-check",{"title":39,"path":40,"stem":41,"icon":42},"Server Proxy","\u002Fsanctum\u002Fproxy","2.sanctum\u002F4.proxy","i-lucide-waypoints",{"title":44,"path":45,"stem":46,"children":47,"page":17},"Passport","\u002Fpassport","3.passport",[48,51,56,61,66,70],{"title":24,"path":49,"stem":50,"icon":27},"\u002Fpassport\u002Fconfiguration","3.passport\u002F1.configuration",{"title":52,"path":53,"stem":54,"icon":55},"Login & Logout","\u002Fpassport\u002Flogin-logout","3.passport\u002F2.login-logout","i-lucide-log-in",{"title":57,"path":58,"stem":59,"icon":60},"Token Management","\u002Fpassport\u002Ftokens","3.passport\u002F3.tokens","i-lucide-key",{"title":62,"path":63,"stem":64,"icon":65},"Two-Factor Authentication","\u002Fpassport\u002Ftwo-factor","3.passport\u002F4.two-factor","i-lucide-shield",{"title":67,"path":68,"stem":69,"icon":37},"Middleware & Route Protection","\u002Fpassport\u002Fmiddleware","3.passport\u002F5.middleware",{"title":71,"path":72,"stem":73,"icon":74},"Examples & Use Cases","\u002Fpassport\u002Fexamples","3.passport\u002F6.examples","i-lucide-code",{"title":76,"path":77,"stem":78,"children":79,"page":17},"Composables","\u002Fcomposables","4.composables",[80,84,89,94,99],{"title":76,"path":81,"stem":82,"icon":83},"\u002Fcomposables\u002Fcomposables","4.composables\u002F1.composables","i-lucide-code-2",{"title":85,"path":86,"stem":87,"icon":88},"$autx","\u002Fcomposables\u002Fautx","4.composables\u002F2.autx","i-lucide-globe",{"title":90,"path":91,"stem":92,"icon":93},"useAuthConfig","\u002Fcomposables\u002Fuse-auth-config","4.composables\u002F3.use-auth-config","i-lucide-settings",{"title":95,"path":96,"stem":97,"icon":98},"useAuthStore","\u002Fcomposables\u002Fuse-auth-store","4.composables\u002F4.use-auth-store","i-lucide-database",{"title":100,"path":101,"stem":102,"icon":37},"useEnsureCsrf","\u002Fcomposables\u002Fuse-ensure-csrf","4.composables\u002F5.use-ensure-csrf",{"title":104,"path":105,"stem":106,"children":107,"page":17},"Middleware","\u002Fmiddleware","5.middleware",[108,111,116],{"title":104,"path":109,"stem":110,"icon":37},"\u002Fmiddleware\u002Fmiddleware","5.middleware\u002F1.middleware",{"title":112,"path":113,"stem":114,"icon":115},"auth","\u002Fmiddleware\u002Fauth","5.middleware\u002F2.auth","i-lucide-lock",{"title":117,"path":118,"stem":119,"icon":65},"two-factor","\u002Fmiddleware\u002Ftwo-factor","5.middleware\u002F3.two-factor",{"title":121,"path":122,"stem":123,"children":124,"page":17},"Hooks","\u002Fhooks","6.hooks",[125,129],{"title":121,"path":126,"stem":127,"icon":128},"\u002Fhooks\u002Fhooks","6.hooks\u002F1.hooks","i-lucide-webhook",{"title":130,"path":131,"stem":132,"icon":133},"prepare:types","\u002Fhooks\u002Fprepare-types","6.hooks\u002F2.prepare-types","i-lucide-file-code",{"title":135,"path":136,"stem":137,"children":138,"page":17},"Advanced","\u002Fadvanced","7.advanced",[139,143,148,152,156,161,165],{"title":135,"path":140,"stem":141,"icon":142},"\u002Fadvanced\u002Fadvanced","7.advanced\u002F1.advanced","i-lucide-settings-2",{"title":144,"path":145,"stem":146,"icon":147},"Custom Configuration","\u002Fadvanced\u002Fcustom-configuration","7.advanced\u002F2.custom-configuration","i-lucide-sliders",{"title":149,"path":150,"stem":151,"icon":32},"Cookie Configuration","\u002Fadvanced\u002Fcookie-configuration","7.advanced\u002F3.cookie-configuration",{"title":153,"path":154,"stem":155,"icon":133},"TypeScript Integration","\u002Fadvanced\u002Ftypescript-integration","7.advanced\u002F4.typescript-integration",{"title":157,"path":158,"stem":159,"icon":160},"Module Aliases","\u002Fadvanced\u002Fmodule-aliases","7.advanced\u002F5.module-aliases","i-lucide-square-library",{"title":162,"path":163,"stem":164,"icon":37},"Security Features","\u002Fadvanced\u002Fsecurity-features","7.advanced\u002F6.security-features",{"title":166,"path":167,"stem":168,"icon":169},"Runtime Configuration","\u002Fadvanced\u002Fruntime-configuration","7.advanced\u002F7.runtime-configuration","i-lucide-server",{"id":171,"title":34,"body":172,"description":1102,"extension":1103,"links":1104,"meta":1105,"navigation":1106,"path":35,"seo":1107,"stem":36,"__hash__":1108},"docs\u002F2.sanctum\u002F3.two-factor.md",{"type":173,"value":174,"toc":1087},"minimark",[175,184,196,199,202,207,217,224,253,263,265,270,277,283,287,290,450,454,457,460,516,519,523,527,530,561,564,568,571,592,596,599,662,666,683,687,690,1019,1022,1026,1042,1046,1049,1083],[176,177,178,179,183],"p",{},"In ",[180,181,182],"strong",{},"Nuxt Umbu",", Two-Factor Authentication is completely optional.",[176,185,186,187,191,192,195],{},"It is only enabled when the ",[188,189,190],"code",{},"twoFactor"," endpoint is configured within the selected strategy.",[193,194],"br",{},"\nIf this endpoint is not defined — or is removed — 2FA support is automatically disabled automatically, without affecting the standard authentication flow.",[176,197,198],{},"This provides full flexibility, allowing you to use standard Sanctum authentication or enable 2FA only when needed.",[200,201],"hr",{},[203,204,206],"h2",{"id":205},"how-2fa-works-with-sanctum","How 2FA Works with Sanctum",[176,208,209,210,213,214,216],{},"Below is the complete and correct 2FA flow for the ",[180,211,212],{},"Sanctum provider"," in ",[180,215,182],{},", including optional middleware usage and SSR behavior.",[176,218,219,220,223],{},"Unlike the Passport strategy, ",[180,221,222],{},"Sanctum does NOT require a custom 2FA header",", because authentication is session-based and Laravel already knows the authenticated user through the session cookie.",[225,226,227,230],"warning",{},[176,228,229],{},"This means:",[231,232,233,241,247,250],"ul",{},[234,235,236,237,240],"li",{},"No ",[188,238,239],{},"Authorization: Bearer"," header",[234,242,243,244,240],{},"No custom ",[188,245,246],{},"X-2FA",[234,248,249],{},"Laravel session handles user state",[234,251,252],{},"CSRF protection is handled automatically",[176,254,255,256],{},"Official Laravel documentation:",[257,258,262],"a",{"href":259,"rel":260},"https:\u002F\u002Flaravel.com\u002Fdocs\u002F12.x\u002Fsanctum",[261],"nofollow","Laravel Sanctum",[200,264],{},[266,267,269],"h3",{"id":268},"_1-user-logs-in-normally","1. User Logs In Normally",[176,271,272,273,276],{},"Authentication works through ",[180,274,275],{},"Laravel session cookies"," (Sanctum).",[176,278,279,280],{},"The user logs in using: ",[188,281,282],{},"POST \u002Flogin",[266,284,286],{"id":285},"_2-frontend-sends-the-2fa-code","2. Frontend Sends the 2FA Code",[176,288,289],{},"Example:",[291,292,297],"pre",{"className":293,"code":294,"language":295,"meta":296,"style":296},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const { $auth } = useNuxtApp()\n\nconst handleVerify = async () => {\n    try {\n        await $auth.twoFactor('admin', code)\n        \u002F\u002F success\n    } catch (err) {\n        \u002F\u002F error\n    }\n}\n","typescript","",[188,298,299,329,336,359,368,404,411,432,438,444],{"__ignoreMap":296},[300,301,304,308,312,316,319,322,326],"span",{"class":302,"line":303},"line",1,[300,305,307],{"class":306},"spNyl","const",[300,309,311],{"class":310},"sMK4o"," {",[300,313,315],{"class":314},"sTEyZ"," $auth ",[300,317,318],{"class":310},"}",[300,320,321],{"class":310}," =",[300,323,325],{"class":324},"s2Zo4"," useNuxtApp",[300,327,328],{"class":314},"()\n",[300,330,332],{"class":302,"line":331},2,[300,333,335],{"emptyLinePlaceholder":334},true,"\n",[300,337,339,341,344,347,350,353,356],{"class":302,"line":338},3,[300,340,307],{"class":306},[300,342,343],{"class":314}," handleVerify ",[300,345,346],{"class":310},"=",[300,348,349],{"class":306}," async",[300,351,352],{"class":310}," ()",[300,354,355],{"class":306}," =>",[300,357,358],{"class":310}," {\n",[300,360,362,366],{"class":302,"line":361},4,[300,363,365],{"class":364},"s7zQu","    try",[300,367,358],{"class":310},[300,369,371,374,377,380,382,386,389,393,395,398,401],{"class":302,"line":370},5,[300,372,373],{"class":364},"        await",[300,375,376],{"class":314}," $auth",[300,378,379],{"class":310},".",[300,381,190],{"class":324},[300,383,385],{"class":384},"swJcz","(",[300,387,388],{"class":310},"'",[300,390,392],{"class":391},"sfazB","admin",[300,394,388],{"class":310},[300,396,397],{"class":310},",",[300,399,400],{"class":314}," code",[300,402,403],{"class":384},")\n",[300,405,407],{"class":302,"line":406},6,[300,408,410],{"class":409},"sHwdD","        \u002F\u002F success\n",[300,412,414,417,420,423,426,429],{"class":302,"line":413},7,[300,415,416],{"class":310},"    }",[300,418,419],{"class":364}," catch",[300,421,422],{"class":384}," (",[300,424,425],{"class":314},"err",[300,427,428],{"class":384},") ",[300,430,431],{"class":310},"{\n",[300,433,435],{"class":302,"line":434},8,[300,436,437],{"class":409},"        \u002F\u002F error\n",[300,439,441],{"class":302,"line":440},9,[300,442,443],{"class":310},"    }\n",[300,445,447],{"class":302,"line":446},10,[300,448,449],{"class":310},"}\n",[266,451,453],{"id":452},"_3-backend-validates-the-code","3. Backend validates the code",[176,455,456],{},"Your Laravel backend must validate the code using the current session user.",[176,458,459],{},"If valid, it MUST return:",[291,461,465],{"className":462,"code":463,"language":464,"meta":296,"style":296},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","    {\n    \"access_token\": \"temporary-2fa-token\",\n    \"expires_in\": 3600\n    }\n","json",[188,466,467,472,497,512],{"__ignoreMap":296},[300,468,469],{"class":302,"line":303},[300,470,471],{"class":310},"    {\n",[300,473,474,477,480,483,486,489,492,494],{"class":302,"line":331},[300,475,476],{"class":310},"    \"",[300,478,479],{"class":306},"access_token",[300,481,482],{"class":310},"\"",[300,484,485],{"class":310},":",[300,487,488],{"class":310}," \"",[300,490,491],{"class":391},"temporary-2fa-token",[300,493,482],{"class":310},[300,495,496],{"class":310},",\n",[300,498,499,501,504,506,508],{"class":302,"line":338},[300,500,476],{"class":310},[300,502,503],{"class":306},"expires_in",[300,505,482],{"class":310},[300,507,485],{"class":310},[300,509,511],{"class":510},"sbssI"," 3600\n",[300,513,514],{"class":302,"line":361},[300,515,443],{"class":310},[176,517,518],{},"If the response does not contain both:",[176,520,521],{},[188,522,479],{},[176,524,525],{},[188,526,503],{},[176,528,529],{},"Nuxt Umbu will throw:",[291,531,533],{"className":293,"code":532,"language":295,"meta":296,"style":296},"    throw new Error('Invalid 2FA response');\n",[188,534,535],{"__ignoreMap":296},[300,536,537,540,543,546,548,550,553,555,558],{"class":302,"line":303},[300,538,539],{"class":364},"    throw",[300,541,542],{"class":310}," new",[300,544,545],{"class":324}," Error",[300,547,385],{"class":314},[300,549,388],{"class":310},[300,551,552],{"class":391},"Invalid 2FA response",[300,554,388],{"class":310},[300,556,557],{"class":314},")",[300,559,560],{"class":310},";\n",[176,562,563],{},"Without this structure, 2FA will not work.",[266,565,567],{"id":566},"_4-nuxt-umbu-stores-the-token","4. Nuxt Umbu stores the token",[176,569,570],{},"On success:",[231,572,573,576,579,586,589],{},[234,574,575],{},"If SSR is being used:",[234,577,578],{},"Middleware also validates on the server",[234,580,581,582,585],{},"A cookie named ",[188,583,584],{},"token_2fa"," is checked",[234,587,588],{},"Currently the cookie name is fixed",[234,590,591],{},"Future versions will allow configuring the cookie name",[203,593,595],{"id":594},"_2fa-middleware-optional","2FA Middleware (Optional)",[176,597,598],{},"To protect pages with 2FA:",[291,600,602],{"className":293,"code":601,"language":295,"meta":296,"style":296},"definePageMeta({\n  layout: false,\n  middleware: ['umbu:auth', 'umbu:two-factor']\n})\n",[188,603,604,613,626,656],{"__ignoreMap":296},[300,605,606,609,611],{"class":302,"line":303},[300,607,608],{"class":324},"definePageMeta",[300,610,385],{"class":314},[300,612,431],{"class":310},[300,614,615,618,620,624],{"class":302,"line":331},[300,616,617],{"class":384},"  layout",[300,619,485],{"class":310},[300,621,623],{"class":622},"sfNiH"," false",[300,625,496],{"class":310},[300,627,628,631,633,636,638,641,643,645,648,651,653],{"class":302,"line":338},[300,629,630],{"class":384},"  middleware",[300,632,485],{"class":310},[300,634,635],{"class":314}," [",[300,637,388],{"class":310},[300,639,640],{"class":391},"umbu:auth",[300,642,388],{"class":310},[300,644,397],{"class":310},[300,646,647],{"class":310}," '",[300,649,650],{"class":391},"umbu:two-factor",[300,652,388],{"class":310},[300,654,655],{"class":314},"]\n",[300,657,658,660],{"class":302,"line":361},[300,659,318],{"class":310},[300,661,403],{"class":314},[266,663,665],{"id":664},"important","Important:",[231,667,668,671,674,677,680],{},[234,669,670],{},"auth middleware validates login",[234,672,673],{},"_2fa middleware validates 2FA completion",[234,675,676],{},"Using _2fa is NOT mandatory",[234,678,679],{},"Only required if you want to enforce 2FA protection",[234,681,682],{},"If you do not use _2fa, 2FA will not block access.",[203,684,686],{"id":685},"enabling-disabling-2fa","Enabling \u002F Disabling 2FA",[176,688,689],{},"2FA is enabled only if the endpoint is defined:",[291,691,694],{"className":293,"code":692,"filename":693,"language":295,"meta":296,"style":296},"export default defineNuxtConfig({\n    auth: {\n        csrf: '\u002Fsanctum\u002Fcsrf-cookie',\n        provider: 'sanctum',\n        strategies: {\n            client: {\n                redirect: {\n                    login: '\u002Fauth',\n                    logout: '\u002Fauth'\n                },\n                endpoints: {\n                    login:  { url: '\u002Flogin', method: 'post' },\n                    user:   { url: '\u002Fapi\u002Fprofile', method: 'get', property: 'profile' },\n                    twoFactor:  { url: '\u002Fapi\u002Ftoken-2fa', method: 'post' }, \u002F\u002F If present → 2FA enabled\n                    logout: { url: '\u002Fapi\u002Flogout', method: 'post' }\n                }\n            }\n        }\n    },\n})\n","nuxt.config.ts",[188,695,696,711,720,736,752,761,770,779,795,809,814,824,863,914,953,988,994,1000,1006,1012],{"__ignoreMap":296},[300,697,698,701,704,707,709],{"class":302,"line":303},[300,699,700],{"class":364},"export",[300,702,703],{"class":364}," default",[300,705,706],{"class":324}," defineNuxtConfig",[300,708,385],{"class":314},[300,710,431],{"class":310},[300,712,713,716,718],{"class":302,"line":331},[300,714,715],{"class":384},"    auth",[300,717,485],{"class":310},[300,719,358],{"class":310},[300,721,722,725,727,729,732,734],{"class":302,"line":338},[300,723,724],{"class":384},"        csrf",[300,726,485],{"class":310},[300,728,647],{"class":310},[300,730,731],{"class":391},"\u002Fsanctum\u002Fcsrf-cookie",[300,733,388],{"class":310},[300,735,496],{"class":310},[300,737,738,741,743,745,748,750],{"class":302,"line":361},[300,739,740],{"class":384},"        provider",[300,742,485],{"class":310},[300,744,647],{"class":310},[300,746,747],{"class":391},"sanctum",[300,749,388],{"class":310},[300,751,496],{"class":310},[300,753,754,757,759],{"class":302,"line":370},[300,755,756],{"class":384},"        strategies",[300,758,485],{"class":310},[300,760,358],{"class":310},[300,762,763,766,768],{"class":302,"line":406},[300,764,765],{"class":384},"            client",[300,767,485],{"class":310},[300,769,358],{"class":310},[300,771,772,775,777],{"class":302,"line":413},[300,773,774],{"class":384},"                redirect",[300,776,485],{"class":310},[300,778,358],{"class":310},[300,780,781,784,786,788,791,793],{"class":302,"line":434},[300,782,783],{"class":384},"                    login",[300,785,485],{"class":310},[300,787,647],{"class":310},[300,789,790],{"class":391},"\u002Fauth",[300,792,388],{"class":310},[300,794,496],{"class":310},[300,796,797,800,802,804,806],{"class":302,"line":440},[300,798,799],{"class":384},"                    logout",[300,801,485],{"class":310},[300,803,647],{"class":310},[300,805,790],{"class":391},[300,807,808],{"class":310},"'\n",[300,810,811],{"class":302,"line":446},[300,812,813],{"class":310},"                },\n",[300,815,817,820,822],{"class":302,"line":816},11,[300,818,819],{"class":384},"                endpoints",[300,821,485],{"class":310},[300,823,358],{"class":310},[300,825,827,829,831,834,837,839,841,844,846,848,851,853,855,858,860],{"class":302,"line":826},12,[300,828,783],{"class":384},[300,830,485],{"class":310},[300,832,833],{"class":310},"  {",[300,835,836],{"class":384}," url",[300,838,485],{"class":310},[300,840,647],{"class":310},[300,842,843],{"class":391},"\u002Flogin",[300,845,388],{"class":310},[300,847,397],{"class":310},[300,849,850],{"class":384}," method",[300,852,485],{"class":310},[300,854,647],{"class":310},[300,856,857],{"class":391},"post",[300,859,388],{"class":310},[300,861,862],{"class":310}," },\n",[300,864,866,869,871,874,876,878,880,883,885,887,889,891,893,896,898,900,903,905,907,910,912],{"class":302,"line":865},13,[300,867,868],{"class":384},"                    user",[300,870,485],{"class":310},[300,872,873],{"class":310},"   {",[300,875,836],{"class":384},[300,877,485],{"class":310},[300,879,647],{"class":310},[300,881,882],{"class":391},"\u002Fapi\u002Fprofile",[300,884,388],{"class":310},[300,886,397],{"class":310},[300,888,850],{"class":384},[300,890,485],{"class":310},[300,892,647],{"class":310},[300,894,895],{"class":391},"get",[300,897,388],{"class":310},[300,899,397],{"class":310},[300,901,902],{"class":384}," property",[300,904,485],{"class":310},[300,906,647],{"class":310},[300,908,909],{"class":391},"profile",[300,911,388],{"class":310},[300,913,862],{"class":310},[300,915,917,920,922,924,926,928,930,933,935,937,939,941,943,945,947,950],{"class":302,"line":916},14,[300,918,919],{"class":384},"                    twoFactor",[300,921,485],{"class":310},[300,923,833],{"class":310},[300,925,836],{"class":384},[300,927,485],{"class":310},[300,929,647],{"class":310},[300,931,932],{"class":391},"\u002Fapi\u002Ftoken-2fa",[300,934,388],{"class":310},[300,936,397],{"class":310},[300,938,850],{"class":384},[300,940,485],{"class":310},[300,942,647],{"class":310},[300,944,857],{"class":391},[300,946,388],{"class":310},[300,948,949],{"class":310}," },",[300,951,952],{"class":409}," \u002F\u002F If present → 2FA enabled\n",[300,954,956,958,960,962,964,966,968,971,973,975,977,979,981,983,985],{"class":302,"line":955},15,[300,957,799],{"class":384},[300,959,485],{"class":310},[300,961,311],{"class":310},[300,963,836],{"class":384},[300,965,485],{"class":310},[300,967,647],{"class":310},[300,969,970],{"class":391},"\u002Fapi\u002Flogout",[300,972,388],{"class":310},[300,974,397],{"class":310},[300,976,850],{"class":384},[300,978,485],{"class":310},[300,980,647],{"class":310},[300,982,857],{"class":391},[300,984,388],{"class":310},[300,986,987],{"class":310}," }\n",[300,989,991],{"class":302,"line":990},16,[300,992,993],{"class":310},"                }\n",[300,995,997],{"class":302,"line":996},17,[300,998,999],{"class":310},"            }\n",[300,1001,1003],{"class":302,"line":1002},18,[300,1004,1005],{"class":310},"        }\n",[300,1007,1009],{"class":302,"line":1008},19,[300,1010,1011],{"class":310},"    },\n",[300,1013,1015,1017],{"class":302,"line":1014},20,[300,1016,318],{"class":310},[300,1018,403],{"class":314},[176,1020,1021],{},"If you remove:",[266,1023,1025],{"id":1024},"then","Then:",[231,1027,1028,1034,1039],{},[234,1029,1030,1033],{},[188,1031,1032],{},"twoFactor()"," method should not be used",[234,1035,1036,1038],{},[188,1037,650],{}," middleware should not be applied",[234,1040,1041],{},"System works as standard Sanctum authentication",[203,1043,1045],{"id":1044},"server-side-validation-ssr","Server-Side Validation (SSR)",[176,1047,1048],{},"When using SSR:",[231,1050,1051,1054,1059,1062,1065,1068,1071,1074,1077,1080],{},[234,1052,1053],{},"Middleware runs on server",[234,1055,1056,1057],{},"Reads cookie ",[188,1058,584],{},[234,1060,1061],{},"Validates active strategy",[234,1063,1064],{},"Validates session state",[234,1066,1067],{},"Forces logout if invalid",[234,1069,1070],{},"This ensures protection in:",[234,1072,1073],{},"CSR",[234,1075,1076],{},"SSR",[234,1078,1079],{},"Page refresh",[234,1081,1082],{},"Direct URL access",[1084,1085,1086],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":296,"searchDepth":303,"depth":331,"links":1088},[1089,1095,1098,1101],{"id":205,"depth":331,"text":206,"children":1090},[1091,1092,1093,1094],{"id":268,"depth":338,"text":269},{"id":285,"depth":338,"text":286},{"id":452,"depth":338,"text":453},{"id":566,"depth":338,"text":567},{"id":594,"depth":331,"text":595,"children":1096},[1097],{"id":664,"depth":338,"text":665},{"id":685,"depth":331,"text":686,"children":1099},[1100],{"id":1024,"depth":338,"text":1025},{"id":1044,"depth":331,"text":1045},"Complete 2FA flow with optional middleware in Nuxt Umbu","md",null,{},{"icon":37},{"title":34,"description":1102},"b8OrqnYIBlnx14DzdpaxH6x8SKW6PZ_lRtfVnb6Z9PM",[1110,1112],{"title":29,"path":30,"stem":31,"description":1111,"icon":32,"children":-1},"Set up cookie CSRF authentication for Sanctum",{"title":39,"path":40,"stem":41,"description":1113,"icon":42,"children":-1},"Planned internal server proxy for Sanctum SSR support",1785126612932]