[{"data":1,"prerenderedAt":850},["ShallowReactive",2],{"navigation_docs":3,"-guides-role-based-access":216,"-guides-role-based-access-surround":845},[4,42,68,115,136,157],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,12,17,22,27,32,37],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","\u002Fgetting-started\u002Fclient-setup","1.getting-started\u002F3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","\u002Fgetting-started\u002Ftype-augmentation","1.getting-started\u002F4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","\u002Fgetting-started\u002Fschema-generation","1.getting-started\u002F5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","\u002Fgetting-started\u002Fhow-it-works","1.getting-started\u002F6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","\u002Fcore-concepts\u002Fserver-auth","2.core-concepts\u002F1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","\u002Fcore-concepts\u002Fsessions","2.core-concepts\u002F2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","\u002Fcore-concepts\u002Froute-protection","2.core-concepts\u002F3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","\u002Fcore-concepts\u002Fauto-imports-aliases","2.core-concepts\u002F4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","\u002Fcore-concepts\u002Fsecurity-caveats","2.core-concepts\u002F5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","\u002Fguides","3.guides",[73,77,82,86,90,94,99,103,107,111],{"title":74,"path":75,"stem":76},"Role‑Based Access","\u002Fguides\u002Frole-based-access","3.guides\u002F1.role-based-access",{"title":78,"path":79,"stem":80,"icon":81},"Setup diagnostics","\u002Fguides\u002Fdiagnostics","3.guides\u002F10.diagnostics","i-lucide-circle-alert",{"title":83,"path":84,"stem":85},"OAuth Providers","\u002Fguides\u002Foauth-providers","3.guides\u002F2.oauth-providers",{"title":87,"path":88,"stem":89},"Custom Database","\u002Fguides\u002Fcustom-database","3.guides\u002F3.custom-database",{"title":91,"path":92,"stem":93},"Database-less Mode","\u002Fguides\u002Fdatabase-less-mode","3.guides\u002F4.database-less-mode",{"title":95,"path":96,"stem":97,"icon":98},"External Auth Backend","\u002Fguides\u002Fexternal-auth-backend","3.guides\u002F5.external-auth-backend","i-lucide-server",{"title":100,"path":101,"stem":102},"Migrating from nuxt-auth-utils","\u002Fguides\u002Fmigrate-from-nuxt-auth-utils","3.guides\u002F6.migrate-from-nuxt-auth-utils",{"title":104,"path":105,"stem":106},"Two-Factor Authentication (TOTP + Backup Codes)","\u002Fguides\u002Ftwo-factor-auth","3.guides\u002F7.two-factor-auth",{"title":108,"path":109,"stem":110},"Testing","\u002Fguides\u002Ftesting","3.guides\u002F8.testing",{"title":112,"path":113,"stem":114},"Production Deployment","\u002Fguides\u002Fproduction-deployment","3.guides\u002F9.production-deployment",{"title":116,"path":117,"stem":118,"children":119,"page":67},"Integrations","\u002Fintegrations","4.integrations",[120,124,128,132],{"title":121,"path":122,"stem":123},"NuxtHub","\u002Fintegrations\u002Fnuxthub","4.integrations\u002F1.nuxthub",{"title":125,"path":126,"stem":127},"DevTools","\u002Fintegrations\u002Fdevtools","4.integrations\u002F2.devtools",{"title":129,"path":130,"stem":131},"Convex","\u002Fintegrations\u002Fconvex","4.integrations\u002F3.convex",{"title":133,"path":134,"stem":135},"i18n","\u002Fintegrations\u002Fi18n","4.integrations\u002F4.i18n",{"title":137,"path":138,"stem":139,"children":140,"page":67},"API Reference","\u002Fapi","5.api",[141,145,149,153],{"title":142,"path":143,"stem":144},"Composables","\u002Fapi\u002Fcomposables","5.api\u002F1.composables",{"title":146,"path":147,"stem":148},"Server Utilities","\u002Fapi\u002Fserver-utils","5.api\u002F2.server-utils",{"title":150,"path":151,"stem":152},"Components","\u002Fapi\u002Fcomponents","5.api\u002F3.components",{"title":154,"path":155,"stem":156},"Types","\u002Fapi\u002Ftypes","5.api\u002F4.types",{"title":158,"path":159,"stem":160,"children":161,"icon":81},"Errors","\u002Ferrors","6.errors\u002F0.index",[162,164,168,172,176,180,184,188,192,196,200,204,208,212],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Better Auth CLI is not installed","\u002Ferrors\u002Fnuxt-auth-cli-missing","6.errors\u002Fnuxt-auth-cli-missing",{"title":169,"path":170,"stem":171},"Better Auth CLI version does not match better-auth","\u002Ferrors\u002Fnuxt-auth-cli-version-mismatch","6.errors\u002Fnuxt-auth-cli-version-mismatch",{"title":173,"path":174,"stem":175},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":177,"path":178,"stem":179},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":181,"path":182,"stem":183},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":185,"path":186,"stem":187},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":189,"path":190,"stem":191},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":193,"path":194,"stem":195},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":197,"path":198,"stem":199},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":201,"path":202,"stem":203},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":205,"path":206,"stem":207},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":209,"path":210,"stem":211},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":213,"path":214,"stem":215},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":217,"title":74,"body":218,"description":839,"extension":840,"links":841,"meta":842,"navigation":330,"path":75,"seo":843,"stem":76,"__hash__":844},"docs\u002F3.guides\u002F1.role-based-access.md",{"type":219,"value":220,"toc":830},"minimark",[221,234,239,425,429,478,482,560,564,587,664,668,679,684,687,826],[222,223,224,225,229,230,233],"p",{},"Use this guide when your Better Auth user shape includes fields such as ",[226,227,228],"code",{},"role",", ",[226,231,232],{},"teamRole",", or custom authorization flags and you want to use them in route rules or server checks.",[235,236,238],"h2",{"id":237},"with-admin-plugin","With Admin Plugin",[240,241,247],"pre",{"className":242,"code":243,"filename":244,"language":245,"meta":246,"style":246},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","import { admin } from 'better-auth\u002Fplugins'\nimport { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\nexport default defineServerAuth({ plugins: [admin()] })\n\n\u002F\u002F nuxt.config.ts - role is now typed!\nrouteRules: {\n  '\u002Fadmin\u002F**': { auth: { user: { role: 'admin' } } },\n  '\u002Fstaff\u002F**': { auth: { user: { role: ['admin', 'moderator'] } } },\n}\n","server\u002Fauth.config.ts","ts","",[226,248,249,276,293,325,332,339,349,382,419],{"__ignoreMap":246},[250,251,254,258,262,266,269,272],"span",{"class":252,"line":253},"line",1,[250,255,257],{"class":256},"sqe1H","import",[250,259,261],{"class":260},"s17Py"," { ",[250,263,265],{"class":264},"sYvLG","admin",[250,267,268],{"class":260}," } ",[250,270,271],{"class":256},"from",[250,273,275],{"class":274},"sPAZv"," 'better-auth\u002Fplugins'\n",[250,277,279,281,283,286,288,290],{"class":252,"line":278},2,[250,280,257],{"class":256},[250,282,261],{"class":260},[250,284,285],{"class":264},"defineServerAuth",[250,287,268],{"class":260},[250,289,271],{"class":256},[250,291,292],{"class":274}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[250,294,296,299,303,307,310,313,317,320,322],{"class":252,"line":295},3,[250,297,298],{"class":256},"export",[250,300,302],{"class":301},"sKg8T"," default",[250,304,306],{"class":305},"sfT9l"," defineServerAuth",[250,308,309],{"class":260},"({ ",[250,311,312],{"class":264},"plugins",[250,314,316],{"class":315},"sVnqq",":",[250,318,319],{"class":260}," [",[250,321,265],{"class":305},[250,323,324],{"class":260},"()] })\n",[250,326,328],{"class":252,"line":327},4,[250,329,331],{"emptyLinePlaceholder":330},true,"\n",[250,333,335],{"class":252,"line":334},5,[250,336,338],{"class":337},"st7cf","\u002F\u002F nuxt.config.ts - role is now typed!\n",[250,340,342,346],{"class":252,"line":341},6,[250,343,345],{"class":344},"sivOE","routeRules",[250,347,348],{"class":260},": {\n",[250,350,352,355,358,361,363,365,368,370,372,374,376,379],{"class":252,"line":351},7,[250,353,354],{"class":274},"  '\u002Fadmin\u002F**'",[250,356,357],{"class":260},": { ",[250,359,360],{"class":264},"auth",[250,362,316],{"class":315},[250,364,261],{"class":260},[250,366,367],{"class":264},"user",[250,369,316],{"class":315},[250,371,261],{"class":260},[250,373,228],{"class":264},[250,375,316],{"class":315},[250,377,378],{"class":274}," 'admin'",[250,380,381],{"class":260}," } } },\n",[250,383,385,388,390,392,394,396,398,400,402,404,406,408,411,413,416],{"class":252,"line":384},8,[250,386,387],{"class":274},"  '\u002Fstaff\u002F**'",[250,389,357],{"class":260},[250,391,360],{"class":264},[250,393,316],{"class":315},[250,395,261],{"class":260},[250,397,367],{"class":264},[250,399,316],{"class":315},[250,401,261],{"class":260},[250,403,228],{"class":264},[250,405,316],{"class":315},[250,407,319],{"class":260},[250,409,410],{"class":274},"'admin'",[250,412,229],{"class":260},[250,414,415],{"class":274},"'moderator'",[250,417,418],{"class":260},"] } } },\n",[250,420,422],{"class":252,"line":421},9,[250,423,424],{"class":260},"}\n",[235,426,428],{"id":427},"with-organization-plugin","With Organization Plugin",[240,430,433],{"className":242,"code":431,"filename":432,"language":245,"meta":246,"style":246},"\u002F\u002F Works the same way with any plugin fields\nrouteRules: {\n  '\u002Fteam\u002F**': { auth: { user: { teamRole: 'owner' } } },\n}\n","nuxt.config.ts",[226,434,435,440,446,474],{"__ignoreMap":246},[250,436,437],{"class":252,"line":253},[250,438,439],{"class":337},"\u002F\u002F Works the same way with any plugin fields\n",[250,441,442,444],{"class":252,"line":278},[250,443,345],{"class":344},[250,445,348],{"class":260},[250,447,448,451,453,455,457,459,461,463,465,467,469,472],{"class":252,"line":295},[250,449,450],{"class":274},"  '\u002Fteam\u002F**'",[250,452,357],{"class":260},[250,454,360],{"class":264},[250,456,316],{"class":315},[250,458,261],{"class":260},[250,460,367],{"class":264},[250,462,316],{"class":315},[250,464,261],{"class":260},[250,466,232],{"class":264},[250,468,316],{"class":315},[250,470,471],{"class":274}," 'owner'",[250,473,381],{"class":260},[250,475,476],{"class":252,"line":327},[250,477,424],{"class":260},[235,479,481],{"id":480},"with-custom-fields","With Custom Fields",[240,483,485],{"className":242,"code":484,"filename":432,"language":245,"meta":246,"style":246},"\u002F\u002F Any field on AuthUser works\nrouteRules: {\n  '\u002Fpremium\u002F**': { auth: { user: { isPremium: true } } },\n  '\u002Fverified\u002F**': { auth: { user: { emailVerified: true } } },\n}\n",[226,486,487,492,498,528,556],{"__ignoreMap":246},[250,488,489],{"class":252,"line":253},[250,490,491],{"class":337},"\u002F\u002F Any field on AuthUser works\n",[250,493,494,496],{"class":252,"line":278},[250,495,345],{"class":344},[250,497,348],{"class":260},[250,499,500,503,505,507,509,511,513,515,517,520,522,526],{"class":252,"line":295},[250,501,502],{"class":274},"  '\u002Fpremium\u002F**'",[250,504,357],{"class":260},[250,506,360],{"class":264},[250,508,316],{"class":315},[250,510,261],{"class":260},[250,512,367],{"class":264},[250,514,316],{"class":315},[250,516,261],{"class":260},[250,518,519],{"class":264},"isPremium",[250,521,316],{"class":315},[250,523,525],{"class":524},"s3ZNE"," true",[250,527,381],{"class":260},[250,529,530,533,535,537,539,541,543,545,547,550,552,554],{"class":252,"line":327},[250,531,532],{"class":274},"  '\u002Fverified\u002F**'",[250,534,357],{"class":260},[250,536,360],{"class":264},[250,538,316],{"class":315},[250,540,261],{"class":260},[250,542,367],{"class":264},[250,544,316],{"class":315},[250,546,261],{"class":260},[250,548,549],{"class":264},"emailVerified",[250,551,316],{"class":315},[250,553,525],{"class":524},[250,555,381],{"class":260},[250,557,558],{"class":252,"line":334},[250,559,424],{"class":260},[235,561,563],{"id":562},"matching-logic","Matching Logic",[565,566,567,575,581],"ul",{},[568,569,570,574],"li",{},[571,572,573],"strong",{},"Single value",": exact match required",[568,576,577,580],{},[571,578,579],{},"Array",": OR logic (user field must be one of the values)",[568,582,583,586],{},[571,584,585],{},"Multiple fields",": AND logic (all must match)",[240,588,590],{"className":242,"code":589,"language":245,"meta":246,"style":246},"\u002F\u002F Must be admin AND verified\n{ auth: { user: { role: 'admin', emailVerified: true } } }\n\n\u002F\u002F Must be admin OR moderator\n{ auth: { user: { role: ['admin', 'moderator'] } } }\n",[226,591,592,597,629,633,638],{"__ignoreMap":246},[250,593,594],{"class":252,"line":253},[250,595,596],{"class":337},"\u002F\u002F Must be admin AND verified\n",[250,598,599,602,604,606,608,610,612,615,617,619,621,623,626],{"class":252,"line":278},[250,600,601],{"class":260},"{ ",[250,603,360],{"class":344},[250,605,357],{"class":260},[250,607,367],{"class":344},[250,609,357],{"class":260},[250,611,228],{"class":344},[250,613,614],{"class":260},": ",[250,616,410],{"class":274},[250,618,229],{"class":260},[250,620,549],{"class":344},[250,622,614],{"class":260},[250,624,625],{"class":524},"true",[250,627,628],{"class":260}," } } }\n",[250,630,631],{"class":252,"line":295},[250,632,331],{"emptyLinePlaceholder":330},[250,634,635],{"class":252,"line":327},[250,636,637],{"class":337},"\u002F\u002F Must be admin OR moderator\n",[250,639,640,642,644,646,648,650,652,655,657,659,661],{"class":252,"line":334},[250,641,601],{"class":260},[250,643,360],{"class":344},[250,645,357],{"class":260},[250,647,367],{"class":344},[250,649,357],{"class":260},[250,651,228],{"class":344},[250,653,654],{"class":260},": [",[250,656,410],{"class":274},[250,658,229],{"class":260},[250,660,415],{"class":274},[250,662,663],{"class":260},"] } } }\n",[235,665,667],{"id":666},"complex-logic","Complex Logic",[222,669,670,671,674,675,678],{},"For complex authorization, use custom middleware or ",[226,672,673],{},"requireUserSession"," with a ",[226,676,677],{},"rule"," callback.",[680,681,683],"h3",{"id":682},"complex-authorization-with-rule-callbacks","Complex Authorization with Rule Callbacks",[222,685,686],{},"For authorization logic that can't be expressed with field matching:",[240,688,691],{"className":242,"code":689,"filename":690,"language":245,"meta":246,"style":246},"export default defineEventHandler(async (event) => {\n  await requireUserSession(event, {\n    rule: (session) => {\n      \u002F\u002F User must have 'reports:read' permission\n      return session.user.permissions?.includes('reports:read')\n    }\n  })\n\n  return getReports()\n})\n","server\u002Fapi\u002Freports.ts",[226,692,693,724,739,757,762,795,800,805,809,820],{"__ignoreMap":246},[250,694,695,697,699,702,705,708,711,715,718,721],{"class":252,"line":253},[250,696,298],{"class":256},[250,698,302],{"class":301},[250,700,701],{"class":305}," defineEventHandler",[250,703,704],{"class":260},"(",[250,706,707],{"class":256},"async",[250,709,710],{"class":260}," (",[250,712,714],{"class":713},"sgisi","event",[250,716,717],{"class":260},") ",[250,719,720],{"class":256},"=>",[250,722,723],{"class":260}," {\n",[250,725,726,729,732,734,736],{"class":252,"line":278},[250,727,728],{"class":256},"  await",[250,730,731],{"class":305}," requireUserSession",[250,733,704],{"class":260},[250,735,714],{"class":264},[250,737,738],{"class":260},", {\n",[250,740,741,744,746,748,751,753,755],{"class":252,"line":295},[250,742,743],{"class":305},"    rule",[250,745,316],{"class":315},[250,747,710],{"class":260},[250,749,750],{"class":713},"session",[250,752,717],{"class":260},[250,754,720],{"class":256},[250,756,723],{"class":260},[250,758,759],{"class":252,"line":327},[250,760,761],{"class":337},"      \u002F\u002F User must have 'reports:read' permission\n",[250,763,764,767,771,774,776,778,781,784,787,789,792],{"class":252,"line":334},[250,765,766],{"class":256},"      return",[250,768,770],{"class":769},"svFNh"," session",[250,772,773],{"class":260},".",[250,775,367],{"class":264},[250,777,773],{"class":260},[250,779,780],{"class":264},"permissions",[250,782,783],{"class":260},"?.",[250,785,786],{"class":305},"includes",[250,788,704],{"class":260},[250,790,791],{"class":274},"'reports:read'",[250,793,794],{"class":260},")\n",[250,796,797],{"class":252,"line":341},[250,798,799],{"class":260},"    }\n",[250,801,802],{"class":252,"line":351},[250,803,804],{"class":260},"  })\n",[250,806,807],{"class":252,"line":384},[250,808,331],{"emptyLinePlaceholder":330},[250,810,811,814,817],{"class":252,"line":421},[250,812,813],{"class":256},"  return",[250,815,816],{"class":305}," getReports",[250,818,819],{"class":260},"()\n",[250,821,823],{"class":252,"line":822},10,[250,824,825],{"class":260},"})\n",[827,828,829],"style",{},"html pre.shiki code .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html pre.shiki code .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .sKg8T, html code.shiki .sKg8T{--shiki-light:#E45649;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .st7cf, html code.shiki .st7cf{--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-default:#848BBD;--shiki-default-font-style:italic;--shiki-dark:#848BBD;--shiki-dark-font-style:italic}html pre.shiki code .sivOE, html code.shiki .sivOE{--shiki-light:#383A42;--shiki-default:#FE4450;--shiki-dark:#FE4450}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 .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}html pre.shiki code .sgisi, html code.shiki .sgisi{--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-default:#FF7EDB;--shiki-default-font-style:italic;--shiki-dark:#FF7EDB;--shiki-dark-font-style:italic}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}",{"title":246,"searchDepth":278,"depth":278,"links":831},[832,833,834,835,836],{"id":237,"depth":278,"text":238},{"id":427,"depth":278,"text":428},{"id":480,"depth":278,"text":481},{"id":562,"depth":278,"text":563},{"id":666,"depth":278,"text":667,"children":837},[838],{"id":682,"depth":295,"text":683},"Protect routes using generic field matching on AuthUser.","md",null,{},{"title":74,"description":839},"DWMeaQK36qYhGhiDzIyel5Hq9aABRF5L5QODNypimU8",[846,848],{"title":64,"path":65,"stem":66,"description":847,"children":-1},"What is enforced where, and what you should not assume.",{"title":78,"path":79,"stem":80,"description":849,"icon":81,"children":-1},"Resolve module setup and schema generation failures using their diagnostic codes.",1792532371638]