[{"data":1,"prerenderedAt":1540},["ShallowReactive",2],{"navigation":3,"\u002Fmiddleware\u002Fauth":170,"\u002Fmiddleware\u002Fauth-surround":1535},[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":112,"body":172,"description":1528,"extension":1529,"links":1530,"meta":1531,"navigation":1532,"path":113,"seo":1533,"stem":114,"__hash__":1534},"docs\u002F5.middleware\u002F2.auth.md",{"type":173,"value":174,"toc":1502},"minimark",[175,184,189,192,197,202,205,221,225,228,241,245,249,315,319,380,384,446,450,454,457,472,476,479,494,498,502,723,727,962,966,969,980,983,1098,1102,1106,1236,1240,1370,1374,1443,1447,1450,1475,1479,1498],[176,177,178,179,183],"p",{},"The ",[180,181,182],"code",{},"umbu:auth"," middleware protects routes by validating user authentication. It automatically handles session validation, token expiration, and redirects unauthenticated users to the login page.",[185,186,188],"h2",{"id":187},"overview","Overview",[176,190,191],{},"The umbu:auth middleware is a route middleware that runs before navigation to protected routes. It validates the user's authentication state and ensures they have a valid session or token.",[193,194,196],"h3",{"id":195},"provider-specific-behavior","Provider-Specific Behavior",[198,199,201],"h4",{"id":200},"sanctum-provider","Sanctum Provider",[176,203,204],{},"For Sanctum, the auth middleware:",[206,207,208,212,215,218],"ul",{},[209,210,211],"li",{},"Validates the Laravel session cookie",[209,213,214],{},"Validates the XSRF token",[209,216,217],{},"Sets XSRF headers for subsequent requests",[209,219,220],{},"Handles server-side and client-side validation differently",[198,222,224],{"id":223},"passport-provider","Passport Provider",[176,226,227],{},"For Passport, the auth middleware:",[206,229,230,233,236,239],{},[209,231,232],{},"Validates the access token",[209,234,235],{},"Checks token expiration",[209,237,238],{},"Validates strategy consistency",[209,240,220],{},[185,242,244],{"id":243},"usage","Usage",[193,246,248],{"id":247},"basic-usage","Basic Usage",[250,251,256],"pre",{"className":252,"code":253,"language":254,"meta":255,"style":255},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F pages\u002Fdashboard.vue\ndefinePageMeta({\n  middleware: ['umbu:auth']\n})\n","typescript","",[180,257,258,267,282,306],{"__ignoreMap":255},[259,260,263],"span",{"class":261,"line":262},"line",1,[259,264,266],{"class":265},"sHwdD","\u002F\u002F pages\u002Fdashboard.vue\n",[259,268,270,274,278],{"class":261,"line":269},2,[259,271,273],{"class":272},"s2Zo4","definePageMeta",[259,275,277],{"class":276},"sTEyZ","(",[259,279,281],{"class":280},"sMK4o","{\n",[259,283,285,289,292,295,298,301,303],{"class":261,"line":284},3,[259,286,288],{"class":287},"swJcz","  middleware",[259,290,291],{"class":280},":",[259,293,294],{"class":276}," [",[259,296,297],{"class":280},"'",[259,299,182],{"class":300},"sfazB",[259,302,297],{"class":280},[259,304,305],{"class":276},"]\n",[259,307,309,312],{"class":261,"line":308},4,[259,310,311],{"class":280},"}",[259,313,314],{"class":276},")\n",[193,316,318],{"id":317},"with-layout","With Layout",[250,320,322],{"className":252,"code":321,"language":254,"meta":255,"style":255},"\u002F\u002F pages\u002Fadmin\u002Fusers.vue\ndefinePageMeta({\n  middleware: ['umbu:auth'],\n  layout: 'admin'\n})\n",[180,323,324,329,337,357,373],{"__ignoreMap":255},[259,325,326],{"class":261,"line":262},[259,327,328],{"class":265},"\u002F\u002F pages\u002Fadmin\u002Fusers.vue\n",[259,330,331,333,335],{"class":261,"line":269},[259,332,273],{"class":272},[259,334,277],{"class":276},[259,336,281],{"class":280},[259,338,339,341,343,345,347,349,351,354],{"class":261,"line":284},[259,340,288],{"class":287},[259,342,291],{"class":280},[259,344,294],{"class":276},[259,346,297],{"class":280},[259,348,182],{"class":300},[259,350,297],{"class":280},[259,352,353],{"class":276},"]",[259,355,356],{"class":280},",\n",[259,358,359,362,364,367,370],{"class":261,"line":308},[259,360,361],{"class":287},"  layout",[259,363,291],{"class":280},[259,365,366],{"class":280}," '",[259,368,369],{"class":300},"admin",[259,371,372],{"class":280},"'\n",[259,374,376,378],{"class":261,"line":375},5,[259,377,311],{"class":280},[259,379,314],{"class":276},[193,381,383],{"id":382},"in-configuration","In Configuration",[250,385,387],{"className":252,"code":386,"language":254,"meta":255,"style":255},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  auth: {\n    globalMiddleware: true \u002F\u002F Apply auth middleware globally\n  }\n})\n",[180,388,389,394,410,420,434,439],{"__ignoreMap":255},[259,390,391],{"class":261,"line":262},[259,392,393],{"class":265},"\u002F\u002F nuxt.config.ts\n",[259,395,396,400,403,406,408],{"class":261,"line":269},[259,397,399],{"class":398},"s7zQu","export",[259,401,402],{"class":398}," default",[259,404,405],{"class":272}," defineNuxtConfig",[259,407,277],{"class":276},[259,409,281],{"class":280},[259,411,412,415,417],{"class":261,"line":284},[259,413,414],{"class":287},"  auth",[259,416,291],{"class":280},[259,418,419],{"class":280}," {\n",[259,421,422,425,427,431],{"class":261,"line":308},[259,423,424],{"class":287},"    globalMiddleware",[259,426,291],{"class":280},[259,428,430],{"class":429},"sfNiH"," true",[259,432,433],{"class":265}," \u002F\u002F Apply auth middleware globally\n",[259,435,436],{"class":261,"line":375},[259,437,438],{"class":280},"  }\n",[259,440,442,444],{"class":261,"line":441},6,[259,443,311],{"class":280},[259,445,314],{"class":276},[185,447,449],{"id":448},"how-it-works","How It Works",[193,451,453],{"id":452},"server-side-validation","Server-Side Validation",[176,455,456],{},"On the server, the middleware:",[458,459,460,463,466,469],"ol",{},[209,461,462],{},"Extracts the session or token from the request",[209,464,465],{},"Validates the session\u002Ftoken hasn't expired",[209,467,468],{},"For Sanctum: Sets XSRF headers for the response",[209,470,471],{},"If validation fails: Logs out and redirects to login",[193,473,475],{"id":474},"client-side-validation","Client-Side Validation",[176,477,478],{},"On the client, the middleware:",[458,480,481,484,486,489,492],{},[209,482,483],{},"Extracts the session or token from cookies\u002FlocalStorage",[209,485,465],{},[209,487,488],{},"Checks strategy consistency (Passport only)",[209,490,491],{},"Validates user auth state",[209,493,471],{},[185,495,497],{"id":496},"validation-logic","Validation Logic",[193,499,501],{"id":500},"sanctum-validation","Sanctum Validation",[250,503,505],{"className":252,"code":504,"language":254,"meta":255,"style":255},"\u002F\u002F Server-side\nconst session = useCookie('laravel-session').value\nconst xsrf = useCookie('XSRF-TOKEN').value\n\nif (!validateSession(strategyName, session, xsrf, true)) {\n  return await handleLogout(strategyName, redirectPath, 'auth')\n}\n\n\u002F\u002F Client-side\nif (!validateSession(strategyName, null, xsrf, false)) {\n  return await handleLogout(strategyName, redirectPath, 'auth')\n}\n",[180,506,507,512,545,571,577,614,645,651,656,662,691,718],{"__ignoreMap":255},[259,508,509],{"class":261,"line":262},[259,510,511],{"class":265},"\u002F\u002F Server-side\n",[259,513,514,518,521,524,527,529,531,534,536,539,542],{"class":261,"line":269},[259,515,517],{"class":516},"spNyl","const",[259,519,520],{"class":276}," session ",[259,522,523],{"class":280},"=",[259,525,526],{"class":272}," useCookie",[259,528,277],{"class":276},[259,530,297],{"class":280},[259,532,533],{"class":300},"laravel-session",[259,535,297],{"class":280},[259,537,538],{"class":276},")",[259,540,541],{"class":280},".",[259,543,544],{"class":276},"value\n",[259,546,547,549,552,554,556,558,560,563,565,567,569],{"class":261,"line":284},[259,548,517],{"class":516},[259,550,551],{"class":276}," xsrf ",[259,553,523],{"class":280},[259,555,526],{"class":272},[259,557,277],{"class":276},[259,559,297],{"class":280},[259,561,562],{"class":300},"XSRF-TOKEN",[259,564,297],{"class":280},[259,566,538],{"class":276},[259,568,541],{"class":280},[259,570,544],{"class":276},[259,572,573],{"class":261,"line":308},[259,574,576],{"emptyLinePlaceholder":575},true,"\n",[259,578,579,582,585,588,591,594,597,600,602,605,607,609,612],{"class":261,"line":375},[259,580,581],{"class":398},"if",[259,583,584],{"class":276}," (",[259,586,587],{"class":280},"!",[259,589,590],{"class":272},"validateSession",[259,592,593],{"class":276},"(strategyName",[259,595,596],{"class":280},",",[259,598,599],{"class":276}," session",[259,601,596],{"class":280},[259,603,604],{"class":276}," xsrf",[259,606,596],{"class":280},[259,608,430],{"class":429},[259,610,611],{"class":276},")) ",[259,613,281],{"class":280},[259,615,616,619,622,625,627,630,632,635,637,639,641,643],{"class":261,"line":441},[259,617,618],{"class":398},"  return",[259,620,621],{"class":398}," await",[259,623,624],{"class":272}," handleLogout",[259,626,277],{"class":287},[259,628,629],{"class":276},"strategyName",[259,631,596],{"class":280},[259,633,634],{"class":276}," redirectPath",[259,636,596],{"class":280},[259,638,366],{"class":280},[259,640,112],{"class":300},[259,642,297],{"class":280},[259,644,314],{"class":287},[259,646,648],{"class":261,"line":647},7,[259,649,650],{"class":280},"}\n",[259,652,654],{"class":261,"line":653},8,[259,655,576],{"emptyLinePlaceholder":575},[259,657,659],{"class":261,"line":658},9,[259,660,661],{"class":265},"\u002F\u002F Client-side\n",[259,663,665,667,669,671,673,675,677,680,682,684,687,689],{"class":261,"line":664},10,[259,666,581],{"class":398},[259,668,584],{"class":276},[259,670,587],{"class":280},[259,672,590],{"class":272},[259,674,593],{"class":276},[259,676,596],{"class":280},[259,678,679],{"class":280}," null,",[259,681,604],{"class":276},[259,683,596],{"class":280},[259,685,686],{"class":429}," false",[259,688,611],{"class":276},[259,690,281],{"class":280},[259,692,694,696,698,700,702,704,706,708,710,712,714,716],{"class":261,"line":693},11,[259,695,618],{"class":398},[259,697,621],{"class":398},[259,699,624],{"class":272},[259,701,277],{"class":287},[259,703,629],{"class":276},[259,705,596],{"class":280},[259,707,634],{"class":276},[259,709,596],{"class":280},[259,711,366],{"class":280},[259,713,112],{"class":300},[259,715,297],{"class":280},[259,717,314],{"class":287},[259,719,721],{"class":261,"line":720},12,[259,722,650],{"class":280},[193,724,726],{"id":725},"passport-validation","Passport Validation",[250,728,730],{"className":252,"code":729,"language":254,"meta":255,"style":255},"\u002F\u002F Server-side\nconst { strategy, token, expires } = extractServerAuthData($auth, 'token')\n\nif (!validateSession(strategy, token, expires)) {\n  return await handleLogout(strategy, redirectPath, 'auth')\n}\n\n\u002F\u002F Client-side\nconst { strategy, token, expires } = extractClientAuthData($auth, 'token')\n\nif (!validateSession(strategy, token, expires) ||\n    !validateStrategyConsistency($auth, store, strategy)) {\n  return await handleLogout(strategy, redirectPath, 'auth')\n}\n",[180,731,732,736,778,782,806,833,837,841,845,880,884,908,930,957],{"__ignoreMap":255},[259,733,734],{"class":261,"line":262},[259,735,511],{"class":265},[259,737,738,740,743,746,748,751,753,756,758,761,764,767,769,771,774,776],{"class":261,"line":269},[259,739,517],{"class":516},[259,741,742],{"class":280}," {",[259,744,745],{"class":276}," strategy",[259,747,596],{"class":280},[259,749,750],{"class":276}," token",[259,752,596],{"class":280},[259,754,755],{"class":276}," expires ",[259,757,311],{"class":280},[259,759,760],{"class":280}," =",[259,762,763],{"class":272}," extractServerAuthData",[259,765,766],{"class":276},"($auth",[259,768,596],{"class":280},[259,770,366],{"class":280},[259,772,773],{"class":300},"token",[259,775,297],{"class":280},[259,777,314],{"class":276},[259,779,780],{"class":261,"line":284},[259,781,576],{"emptyLinePlaceholder":575},[259,783,784,786,788,790,792,795,797,799,801,804],{"class":261,"line":308},[259,785,581],{"class":398},[259,787,584],{"class":276},[259,789,587],{"class":280},[259,791,590],{"class":272},[259,793,794],{"class":276},"(strategy",[259,796,596],{"class":280},[259,798,750],{"class":276},[259,800,596],{"class":280},[259,802,803],{"class":276}," expires)) ",[259,805,281],{"class":280},[259,807,808,810,812,814,816,819,821,823,825,827,829,831],{"class":261,"line":375},[259,809,618],{"class":398},[259,811,621],{"class":398},[259,813,624],{"class":272},[259,815,277],{"class":287},[259,817,818],{"class":276},"strategy",[259,820,596],{"class":280},[259,822,634],{"class":276},[259,824,596],{"class":280},[259,826,366],{"class":280},[259,828,112],{"class":300},[259,830,297],{"class":280},[259,832,314],{"class":287},[259,834,835],{"class":261,"line":441},[259,836,650],{"class":280},[259,838,839],{"class":261,"line":647},[259,840,576],{"emptyLinePlaceholder":575},[259,842,843],{"class":261,"line":653},[259,844,661],{"class":265},[259,846,847,849,851,853,855,857,859,861,863,865,868,870,872,874,876,878],{"class":261,"line":658},[259,848,517],{"class":516},[259,850,742],{"class":280},[259,852,745],{"class":276},[259,854,596],{"class":280},[259,856,750],{"class":276},[259,858,596],{"class":280},[259,860,755],{"class":276},[259,862,311],{"class":280},[259,864,760],{"class":280},[259,866,867],{"class":272}," extractClientAuthData",[259,869,766],{"class":276},[259,871,596],{"class":280},[259,873,366],{"class":280},[259,875,773],{"class":300},[259,877,297],{"class":280},[259,879,314],{"class":276},[259,881,882],{"class":261,"line":664},[259,883,576],{"emptyLinePlaceholder":575},[259,885,886,888,890,892,894,896,898,900,902,905],{"class":261,"line":693},[259,887,581],{"class":398},[259,889,584],{"class":276},[259,891,587],{"class":280},[259,893,590],{"class":272},[259,895,794],{"class":276},[259,897,596],{"class":280},[259,899,750],{"class":276},[259,901,596],{"class":280},[259,903,904],{"class":276}," expires) ",[259,906,907],{"class":280},"||\n",[259,909,910,913,916,918,920,923,925,928],{"class":261,"line":720},[259,911,912],{"class":280},"    !",[259,914,915],{"class":272},"validateStrategyConsistency",[259,917,766],{"class":276},[259,919,596],{"class":280},[259,921,922],{"class":276}," store",[259,924,596],{"class":280},[259,926,927],{"class":276}," strategy)) ",[259,929,281],{"class":280},[259,931,933,935,937,939,941,943,945,947,949,951,953,955],{"class":261,"line":932},13,[259,934,618],{"class":398},[259,936,621],{"class":398},[259,938,624],{"class":272},[259,940,277],{"class":287},[259,942,818],{"class":276},[259,944,596],{"class":280},[259,946,634],{"class":276},[259,948,596],{"class":280},[259,950,366],{"class":280},[259,952,112],{"class":300},[259,954,297],{"class":280},[259,956,314],{"class":287},[259,958,960],{"class":261,"line":959},14,[259,961,650],{"class":280},[185,963,965],{"id":964},"redirect-behavior","Redirect Behavior",[176,967,968],{},"When authentication fails, the middleware:",[458,970,971,974,977],{},[209,972,973],{},"Logs out the current session",[209,975,976],{},"Redirects to the configured login path",[209,978,979],{},"Stores the intended destination for post-login redirect",[176,981,982],{},"The redirect path is configured in your auth setup:",[250,984,986],{"className":252,"code":985,"language":254,"meta":255,"style":255},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  auth: {\n    redirect: {\n      login: '\u002Flogin',\n      logout: '\u002F',\n      home: '\u002Fdashboard',\n      callback: '\u002Fcallback'\n    }\n  }\n})\n",[180,987,988,992,1004,1012,1021,1037,1053,1069,1083,1088,1092],{"__ignoreMap":255},[259,989,990],{"class":261,"line":262},[259,991,393],{"class":265},[259,993,994,996,998,1000,1002],{"class":261,"line":269},[259,995,399],{"class":398},[259,997,402],{"class":398},[259,999,405],{"class":272},[259,1001,277],{"class":276},[259,1003,281],{"class":280},[259,1005,1006,1008,1010],{"class":261,"line":284},[259,1007,414],{"class":287},[259,1009,291],{"class":280},[259,1011,419],{"class":280},[259,1013,1014,1017,1019],{"class":261,"line":308},[259,1015,1016],{"class":287},"    redirect",[259,1018,291],{"class":280},[259,1020,419],{"class":280},[259,1022,1023,1026,1028,1030,1033,1035],{"class":261,"line":375},[259,1024,1025],{"class":287},"      login",[259,1027,291],{"class":280},[259,1029,366],{"class":280},[259,1031,1032],{"class":300},"\u002Flogin",[259,1034,297],{"class":280},[259,1036,356],{"class":280},[259,1038,1039,1042,1044,1046,1049,1051],{"class":261,"line":441},[259,1040,1041],{"class":287},"      logout",[259,1043,291],{"class":280},[259,1045,366],{"class":280},[259,1047,1048],{"class":300},"\u002F",[259,1050,297],{"class":280},[259,1052,356],{"class":280},[259,1054,1055,1058,1060,1062,1065,1067],{"class":261,"line":647},[259,1056,1057],{"class":287},"      home",[259,1059,291],{"class":280},[259,1061,366],{"class":280},[259,1063,1064],{"class":300},"\u002Fdashboard",[259,1066,297],{"class":280},[259,1068,356],{"class":280},[259,1070,1071,1074,1076,1078,1081],{"class":261,"line":653},[259,1072,1073],{"class":287},"      callback",[259,1075,291],{"class":280},[259,1077,366],{"class":280},[259,1079,1080],{"class":300},"\u002Fcallback",[259,1082,372],{"class":280},[259,1084,1085],{"class":261,"line":658},[259,1086,1087],{"class":280},"    }\n",[259,1089,1090],{"class":261,"line":664},[259,1091,438],{"class":280},[259,1093,1094,1096],{"class":261,"line":693},[259,1095,311],{"class":280},[259,1097,314],{"class":276},[185,1099,1101],{"id":1100},"examples","Examples",[193,1103,1105],{"id":1104},"protecting-dashboard","Protecting Dashboard",[250,1107,1109],{"className":252,"code":1108,"language":254,"meta":255,"style":255},"\u002F\u002F pages\u002Fdashboard\u002Findex.vue\n\u003Cscript setup>\ndefinePageMeta({\n  middleware: ['umbu:auth']\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>Dashboard\u003C\u002Fh1>\n    \u003C!-- Protected content -->\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[180,1110,1111,1116,1127,1135,1151,1157,1167,1171,1181,1191,1208,1219,1228],{"__ignoreMap":255},[259,1112,1113],{"class":261,"line":262},[259,1114,1115],{"class":265},"\u002F\u002F pages\u002Fdashboard\u002Findex.vue\n",[259,1117,1118,1121,1124],{"class":261,"line":269},[259,1119,1120],{"class":280},"\u003C",[259,1122,1123],{"class":276},"script setup",[259,1125,1126],{"class":280},">\n",[259,1128,1129,1131,1133],{"class":261,"line":284},[259,1130,273],{"class":272},[259,1132,277],{"class":276},[259,1134,281],{"class":280},[259,1136,1137,1139,1141,1143,1145,1147,1149],{"class":261,"line":308},[259,1138,288],{"class":287},[259,1140,291],{"class":280},[259,1142,294],{"class":276},[259,1144,297],{"class":280},[259,1146,182],{"class":300},[259,1148,297],{"class":280},[259,1150,305],{"class":276},[259,1152,1153,1155],{"class":261,"line":375},[259,1154,311],{"class":280},[259,1156,314],{"class":276},[259,1158,1159,1162,1165],{"class":261,"line":441},[259,1160,1161],{"class":280},"\u003C\u002F",[259,1163,1164],{"class":276},"script",[259,1166,1126],{"class":280},[259,1168,1169],{"class":261,"line":647},[259,1170,576],{"emptyLinePlaceholder":575},[259,1172,1173,1175,1179],{"class":261,"line":653},[259,1174,1120],{"class":276},[259,1176,1178],{"class":1177},"sBMFI","template",[259,1180,1126],{"class":276},[259,1182,1183,1186,1189],{"class":261,"line":658},[259,1184,1185],{"class":276},"  \u003C",[259,1187,1188],{"class":1177},"div",[259,1190,1126],{"class":276},[259,1192,1193,1196,1199,1202,1204,1206],{"class":261,"line":664},[259,1194,1195],{"class":276},"    \u003C",[259,1197,1198],{"class":1177},"h1",[259,1200,1201],{"class":276},">Dashboard",[259,1203,1161],{"class":280},[259,1205,1198],{"class":276},[259,1207,1126],{"class":280},[259,1209,1210,1213,1216],{"class":261,"line":693},[259,1211,1212],{"class":280},"    \u003C!--",[259,1214,1215],{"class":276}," Protected content ",[259,1217,1218],{"class":280},"-->\n",[259,1220,1221,1224,1226],{"class":261,"line":720},[259,1222,1223],{"class":280},"  \u003C\u002F",[259,1225,1188],{"class":276},[259,1227,1126],{"class":280},[259,1229,1230,1232,1234],{"class":261,"line":932},[259,1231,1161],{"class":280},[259,1233,1178],{"class":276},[259,1235,1126],{"class":280},[193,1237,1239],{"id":1238},"protecting-admin-routes","Protecting Admin Routes",[250,1241,1243],{"className":252,"code":1242,"language":254,"meta":255,"style":255},"\u002F\u002F pages\u002Fadmin\u002Findex.vue\n\u003Cscript setup>\ndefinePageMeta({\n  middleware: ['umbu:auth'],\n  layout: 'admin'\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>Admin Panel\u003C\u002Fh1>\n    \u003C!-- Protected admin content -->\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[180,1244,1245,1250,1258,1266,1284,1296,1302,1310,1314,1322,1330,1345,1354,1362],{"__ignoreMap":255},[259,1246,1247],{"class":261,"line":262},[259,1248,1249],{"class":265},"\u002F\u002F pages\u002Fadmin\u002Findex.vue\n",[259,1251,1252,1254,1256],{"class":261,"line":269},[259,1253,1120],{"class":280},[259,1255,1123],{"class":276},[259,1257,1126],{"class":280},[259,1259,1260,1262,1264],{"class":261,"line":284},[259,1261,273],{"class":272},[259,1263,277],{"class":276},[259,1265,281],{"class":280},[259,1267,1268,1270,1272,1274,1276,1278,1280,1282],{"class":261,"line":308},[259,1269,288],{"class":287},[259,1271,291],{"class":280},[259,1273,294],{"class":276},[259,1275,297],{"class":280},[259,1277,182],{"class":300},[259,1279,297],{"class":280},[259,1281,353],{"class":276},[259,1283,356],{"class":280},[259,1285,1286,1288,1290,1292,1294],{"class":261,"line":375},[259,1287,361],{"class":287},[259,1289,291],{"class":280},[259,1291,366],{"class":280},[259,1293,369],{"class":300},[259,1295,372],{"class":280},[259,1297,1298,1300],{"class":261,"line":441},[259,1299,311],{"class":280},[259,1301,314],{"class":276},[259,1303,1304,1306,1308],{"class":261,"line":647},[259,1305,1161],{"class":280},[259,1307,1164],{"class":276},[259,1309,1126],{"class":280},[259,1311,1312],{"class":261,"line":653},[259,1313,576],{"emptyLinePlaceholder":575},[259,1315,1316,1318,1320],{"class":261,"line":658},[259,1317,1120],{"class":276},[259,1319,1178],{"class":1177},[259,1321,1126],{"class":276},[259,1323,1324,1326,1328],{"class":261,"line":664},[259,1325,1185],{"class":276},[259,1327,1188],{"class":1177},[259,1329,1126],{"class":276},[259,1331,1332,1334,1336,1339,1341,1343],{"class":261,"line":693},[259,1333,1195],{"class":276},[259,1335,1198],{"class":1177},[259,1337,1338],{"class":276},">Admin Panel",[259,1340,1161],{"class":280},[259,1342,1198],{"class":276},[259,1344,1126],{"class":280},[259,1346,1347,1349,1352],{"class":261,"line":720},[259,1348,1212],{"class":280},[259,1350,1351],{"class":276}," Protected admin content ",[259,1353,1218],{"class":280},[259,1355,1356,1358,1360],{"class":261,"line":932},[259,1357,1223],{"class":280},[259,1359,1188],{"class":276},[259,1361,1126],{"class":280},[259,1363,1364,1366,1368],{"class":261,"line":959},[259,1365,1161],{"class":280},[259,1367,1178],{"class":276},[259,1369,1126],{"class":280},[193,1371,1373],{"id":1372},"combining-with-other-middleware","Combining with Other Middleware",[250,1375,1377],{"className":252,"code":1376,"language":254,"meta":255,"style":255},"\u002F\u002F pages\u002Fprofile\u002Findex.vue\n\u003Cscript setup>\ndefinePageMeta({\n  middleware: ['umbu:auth', 'verified'] \u002F\u002F Multiple middleware\n})\n\u003C\u002Fscript>\n",[180,1378,1379,1384,1392,1400,1429,1435],{"__ignoreMap":255},[259,1380,1381],{"class":261,"line":262},[259,1382,1383],{"class":265},"\u002F\u002F pages\u002Fprofile\u002Findex.vue\n",[259,1385,1386,1388,1390],{"class":261,"line":269},[259,1387,1120],{"class":280},[259,1389,1123],{"class":276},[259,1391,1126],{"class":280},[259,1393,1394,1396,1398],{"class":261,"line":284},[259,1395,273],{"class":272},[259,1397,277],{"class":276},[259,1399,281],{"class":280},[259,1401,1402,1404,1406,1408,1410,1412,1414,1416,1418,1421,1423,1426],{"class":261,"line":308},[259,1403,288],{"class":287},[259,1405,291],{"class":280},[259,1407,294],{"class":276},[259,1409,297],{"class":280},[259,1411,182],{"class":300},[259,1413,297],{"class":280},[259,1415,596],{"class":280},[259,1417,366],{"class":280},[259,1419,1420],{"class":300},"verified",[259,1422,297],{"class":280},[259,1424,1425],{"class":276},"] ",[259,1427,1428],{"class":265},"\u002F\u002F Multiple middleware\n",[259,1430,1431,1433],{"class":261,"line":375},[259,1432,311],{"class":280},[259,1434,314],{"class":276},[259,1436,1437,1439,1441],{"class":261,"line":441},[259,1438,1161],{"class":280},[259,1440,1164],{"class":276},[259,1442,1126],{"class":280},[185,1444,1446],{"id":1445},"error-handling","Error Handling",[176,1448,1449],{},"The middleware automatically handles authentication errors:",[206,1451,1452,1459,1464,1469],{},[209,1453,1454,1458],{},[1455,1456,1457],"strong",{},"401 Unauthorized",": Logs out and redirects",[209,1460,1461,1458],{},[1455,1462,1463],{},"Expired token",[209,1465,1466,1458],{},[1455,1467,1468],{},"Invalid session",[209,1470,1471,1474],{},[1455,1472,1473],{},"Strategy mismatch",": Logs out and redirects (Passport)",[185,1476,1478],{"id":1477},"notes","Notes",[206,1480,1481,1486,1489,1492,1495],{},[209,1482,178,1483,1485],{},[180,1484,182],{}," middleware is automatically registered by the module",[209,1487,1488],{},"No manual import required",[209,1490,1491],{},"Works with both Sanctum and Passport providers",[209,1493,1494],{},"Validation logic differs between providers",[209,1496,1497],{},"Automatic logout on validation failure",[1499,1500,1501],"style",{},"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 .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 .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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":255,"searchDepth":262,"depth":269,"links":1503},[1504,1507,1512,1516,1520,1521,1526,1527],{"id":187,"depth":269,"text":188,"children":1505},[1506],{"id":195,"depth":284,"text":196},{"id":243,"depth":269,"text":244,"children":1508},[1509,1510,1511],{"id":247,"depth":284,"text":248},{"id":317,"depth":284,"text":318},{"id":382,"depth":284,"text":383},{"id":448,"depth":269,"text":449,"children":1513},[1514,1515],{"id":452,"depth":284,"text":453},{"id":474,"depth":284,"text":475},{"id":496,"depth":269,"text":497,"children":1517},[1518,1519],{"id":500,"depth":284,"text":501},{"id":725,"depth":284,"text":726},{"id":964,"depth":269,"text":965},{"id":1100,"depth":269,"text":1101,"children":1522},[1523,1524,1525],{"id":1104,"depth":284,"text":1105},{"id":1238,"depth":284,"text":1239},{"id":1372,"depth":284,"text":1373},{"id":1445,"depth":269,"text":1446},{"id":1477,"depth":269,"text":1478},"Route middleware to protect authenticated routes","md",null,{},{"icon":115},{"title":112,"description":1528},"02I4LijYnhqN7MeHN5R5vinueOCQmU66T1zi-KP7Bzs",[1536,1538],{"title":104,"path":109,"stem":110,"description":1537,"icon":37,"children":-1},"Route middleware for protecting application routes in Nuxt Umbu",{"title":117,"path":118,"stem":119,"description":1539,"icon":65,"children":-1},"Route middleware to protect 2FA-enabled routes",1785126614837]