[{"data":1,"prerenderedAt":1239},["ShallowReactive",2],{"navigation":3,"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Fprotecting-routes":273,"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Fprotecting-routes-surround":1185,"packages-data":1190},[4,23],{"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-tabler-home",{"title":13,"path":14,"stem":15,"icon":16},"Manifest","\u002Fgetting-started\u002Fmanifest","1.getting-started\u002F2.manifest","i-tabler-file-diff",{"title":18,"path":19,"stem":20,"icon":21},"Contributing","\u002Fgetting-started\u002Fcontributing","1.getting-started\u002F3.contributing","i-tabler-git-fork",false,{"title":24,"path":25,"stem":26,"children":27,"icon":30},"Packages","\u002Fpackages","2.packages\u002F1.index",[28,31,108,194,247],{"title":29,"path":25,"stem":26,"icon":30},"Overview","i-tabler-packages",{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":22},"AdonisJS API Query","i-tabler-filter-search","\u002Fpackages\u002Fadonisjs-api-query","2.packages\u002Fadonisjs-api-query",[37,56,87],{"title":5,"icon":38,"path":39,"stem":40,"children":41,"page":22},"i-tabler-rocket","\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started","2.packages\u002Fadonisjs-api-query\u002F1.getting-started",[42,46,51],{"title":10,"path":43,"stem":44,"icon":45},"\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-api-query\u002F1.getting-started\u002F1.introduction","i-tabler-book",{"title":47,"path":48,"stem":49,"icon":50},"Installation","\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-api-query\u002F1.getting-started\u002F2.installation","i-tabler-download",{"title":52,"path":53,"stem":54,"icon":55},"Configuration","\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Fconfiguration","2.packages\u002Fadonisjs-api-query\u002F1.getting-started\u002F3.configuration","i-tabler-settings",{"title":57,"icon":58,"path":59,"stem":60,"children":61,"page":22},"Features","i-tabler-sparkles","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures","2.packages\u002Fadonisjs-api-query\u002F2.features",[62,67,72,77,82],{"title":63,"path":64,"stem":65,"icon":66},"Filtering","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Ffiltering","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F1.filtering","i-tabler-filter",{"title":68,"path":69,"stem":70,"icon":71},"Sorting","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Fsorting","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F2.sorting","i-tabler-arrows-sort",{"title":73,"path":74,"stem":75,"icon":76},"Including Relationships","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Fincluding-relationships","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F3.including-relationships","i-tabler-hierarchy-2",{"title":78,"path":79,"stem":80,"icon":81},"Filterable Classes","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Ffilterable-classes","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F4.filterable-classes","i-tabler-box-model",{"title":83,"path":84,"stem":85,"icon":86},"Validation","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Fvalidation","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F5.validation","i-tabler-shield-check",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":22},"Advanced Usage","i-tabler-adjustments","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced","2.packages\u002Fadonisjs-api-query\u002F3.advanced",[93,98,103],{"title":94,"path":95,"stem":96,"icon":97},"Custom Filters, Sorts & Includes","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced\u002Fcustom-clauses","2.packages\u002Fadonisjs-api-query\u002F3.advanced\u002F1.custom-clauses","i-tabler-puzzle",{"title":99,"path":100,"stem":101,"icon":102},"Request & Delimiters","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced\u002Frequest-and-delimiters","2.packages\u002Fadonisjs-api-query\u002F3.advanced\u002F2.request-and-delimiters","i-tabler-brackets-contain",{"title":104,"path":105,"stem":106,"icon":107},"Exceptions","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced\u002Fexceptions","2.packages\u002Fadonisjs-api-query\u002F3.advanced\u002F3.exceptions","i-tabler-alert-triangle",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":22},"AdonisJS Permission","i-tabler-shield-lock","\u002Fpackages\u002Fadonisjs-permission","2.packages\u002Fadonisjs-permission",[114,127,157,183],{"title":5,"icon":38,"path":115,"stem":116,"children":117,"page":22},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started","2.packages\u002Fadonisjs-permission\u002F1.getting-started",[118,121,124],{"title":10,"path":119,"stem":120,"icon":45},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F1.introduction",{"title":47,"path":122,"stem":123,"icon":50},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F2.installation",{"title":52,"path":125,"stem":126,"icon":55},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Fconfiguration","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F3.configuration",{"title":128,"icon":86,"path":129,"stem":130,"children":131,"page":22},"Basic Usage","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage","2.packages\u002Fadonisjs-permission\u002F2.basic-usage",[132,137,142,147,152],{"title":133,"path":134,"stem":135,"icon":136},"Roles & Permissions","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Froles-and-permissions","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F1.roles-and-permissions","i-tabler-users",{"title":138,"path":139,"stem":140,"icon":141},"Checking Access","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fchecking","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F2.checking","i-tabler-checks",{"title":143,"path":144,"stem":145,"icon":146},"Middleware","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fmiddleware","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F3.middleware","i-tabler-route",{"title":148,"path":149,"stem":150,"icon":151},"Wildcard Permissions","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fwildcard-permissions","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F4.wildcard-permissions","i-tabler-asterisk",{"title":153,"path":154,"stem":155,"icon":156},"Catalog & Sync","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fcatalog","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F5.catalog","i-tabler-refresh",{"title":158,"icon":159,"path":160,"stem":161,"children":162,"page":22},"Advanced","i-tabler-tool","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced","2.packages\u002Fadonisjs-permission\u002F3.advanced",[163,168,173,178],{"title":164,"path":165,"stem":166,"icon":167},"Teams","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fteams","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F1.teams","i-tabler-building",{"title":169,"path":170,"stem":171,"icon":172},"Super-Admin","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fsuper-admin","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F2.super-admin","i-tabler-crown",{"title":174,"path":175,"stem":176,"icon":177},"Events","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fevents","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F3.events","i-tabler-radio",{"title":179,"path":180,"stem":181,"icon":182},"Cache","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fcache","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F4.cache","i-tabler-database",{"title":184,"icon":185,"path":186,"stem":187,"children":188,"page":22},"Upgrading","i-tabler-circle-arrow-up","\u002Fpackages\u002Fadonisjs-permission\u002Fupgrading","2.packages\u002Fadonisjs-permission\u002F4.upgrading",[189],{"title":190,"path":191,"stem":192,"icon":193},"From adonis-lucid-permission","\u002Fpackages\u002Fadonisjs-permission\u002Fupgrading\u002Ffrom-adonis-lucid-permission","2.packages\u002Fadonisjs-permission\u002F4.upgrading\u002F1.from-adonis-lucid-permission","i-tabler-git-compare",{"title":195,"icon":196,"path":197,"stem":198,"children":199,"page":22},"Simple Auth","i-tabler-key","\u002Fpackages\u002Fadonisjs-simple-auth","2.packages\u002Fadonisjs-simple-auth",[200,214,233],{"title":5,"icon":38,"path":201,"stem":202,"children":203,"page":22},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started",[204,208,211],{"title":10,"path":205,"stem":206,"icon":207},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started\u002F1.introduction","i-tabler-info-circle",{"title":47,"path":209,"stem":210,"icon":50},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started\u002F2.installation",{"title":52,"path":212,"stem":213,"icon":55},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started\u002Fconfiguration","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started\u002F3.configuration",{"title":215,"icon":110,"path":216,"stem":217,"children":218,"page":22},"Usage","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage","2.packages\u002Fadonisjs-simple-auth\u002F2.usage",[219,224,229],{"title":220,"path":221,"stem":222,"icon":223},"Generating API Keys","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Fgenerating-api-keys","2.packages\u002Fadonisjs-simple-auth\u002F2.usage\u002F1.generating-api-keys","i-tabler-terminal-2",{"title":225,"path":226,"stem":227,"icon":228},"Protecting Routes","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Fprotecting-routes","2.packages\u002Fadonisjs-simple-auth\u002F2.usage\u002F2.protecting-routes","i-tabler-lock",{"title":230,"path":231,"stem":232,"icon":107},"Error Handling & i18n","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Ferror-handling","2.packages\u002Fadonisjs-simple-auth\u002F2.usage\u002F3.error-handling",{"title":158,"icon":89,"path":234,"stem":235,"children":236,"page":22},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fadvanced","2.packages\u002Fadonisjs-simple-auth\u002F3.advanced",[237,242],{"title":238,"path":239,"stem":240,"icon":241},"Testing with Japa","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fadvanced\u002Ftesting-with-japa","2.packages\u002Fadonisjs-simple-auth\u002F3.advanced\u002F1.testing-with-japa","i-tabler-flask",{"title":243,"path":244,"stem":245,"icon":246},"API Reference","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fadvanced\u002Fapi-reference","2.packages\u002Fadonisjs-simple-auth\u002F3.advanced\u002F2.api-reference","i-tabler-code",{"title":248,"icon":249,"path":250,"stem":251,"children":252,"page":22},"AdonisJS Soft Deletes","i-tabler-trash-off","\u002Fpackages\u002Fadonisjs-soft-deletes","2.packages\u002Fadonisjs-soft-deletes",[253,263],{"title":5,"icon":38,"path":254,"stem":255,"children":256,"page":22},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fgetting-started","2.packages\u002Fadonisjs-soft-deletes\u002F1.getting-started",[257,260],{"title":10,"path":258,"stem":259,"icon":207},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-soft-deletes\u002F1.getting-started\u002F1.introduction",{"title":47,"path":261,"stem":262,"icon":50},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-soft-deletes\u002F1.getting-started\u002F2.installation",{"title":215,"icon":45,"path":264,"stem":265,"children":266,"page":22},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fusage","2.packages\u002Fadonisjs-soft-deletes\u002F2.usage",[267,270],{"title":215,"path":268,"stem":269,"icon":246},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fusage\u002Fusage","2.packages\u002Fadonisjs-soft-deletes\u002F2.usage\u002F1.usage",{"title":243,"path":271,"stem":272,"icon":45},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fusage\u002Fapi-reference","2.packages\u002Fadonisjs-soft-deletes\u002F2.usage\u002F2.api-reference",{"id":274,"title":225,"body":275,"description":1179,"extension":1180,"meta":1181,"navigation":1182,"path":226,"seo":1183,"stem":227,"__hash__":1184},"docs\u002F2.packages\u002Fadonisjs-simple-auth\u002F2.usage\u002F2.protecting-routes.md",{"type":276,"value":277,"toc":1170},"minimark",[278,287,292,303,345,352,370,683,687,694,823,829,845,988,992,998,1161,1166],[279,280,281,282,286],"p",{},"Once your API key is configured, you can protect individual routes, route groups, or invoke authentication manually inside controllers and middleware using ",[283,284,285],"code",{},"ctx.simpleAuth",".",[288,289,291],"h2",{"id":290},"how-middleware-works","How Middleware Works",[279,293,294,295,298,299,302],{},"During ",[296,297,47],"a",{"href":209},", two middleware entries are registered in ",[283,300,301],{},"start\u002Fkernel.ts",":",[304,305,306,328],"ol",{},[307,308,309,316,317,320,321,323,324,327],"li",{},[310,311,312,315],"strong",{},[283,313,314],{},"SimpleAuthMiddleware"," (router middleware)",": Instantiates ",[283,318,319],{},"SimpleAuth"," and attaches it to every HTTP request context as ",[283,322,285],{},". It does ",[310,325,326],{},"not"," block requests on its own.",[307,329,330,340,341,344],{},[310,331,332,335,336,339],{},[283,333,334],{},"ApiKeyMiddleware"," (",[283,337,338],{},"apiKey"," named middleware)",": Calls ",[283,342,343],{},"ctx.simpleAuth.authenticate()"," to verify the incoming API key header before allowing the request to proceed.",[288,346,348,349,351],{"id":347},"using-the-apikey-middleware","Using the ",[283,350,338],{}," Middleware",[279,353,354,355,358,359,362,363,366,367,302],{},"Import the ",[283,356,357],{},"middleware"," collection from ",[283,360,361],{},"#start\u002Fkernel"," and attach ",[283,364,365],{},"middleware.apiKey()"," to any route or route group in ",[283,368,369],{},"start\u002Froutes.ts",[371,372,377],"pre",{"className":373,"code":374,"filename":369,"language":375,"meta":376,"style":376},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import router from '@adonisjs\u002Fcore\u002Fservices\u002Frouter';\nimport { middleware } from '#start\u002Fkernel';\n\n\u002F\u002F Protect a single route\nrouter\n  .get('\u002Fwebhooks\u002Fsync', async () => {\n    return { status: 'ok' };\n  })\n  .use(middleware.apiKey());\n\n\u002F\u002F Protect a group of routes\nrouter\n  .group(() => {\n    router.get('\u002Fusers', '#controllers\u002Fusers_controller.index');\n    router.post('\u002Fusers', '#controllers\u002Fusers_controller.store');\n  })\n  .prefix('\u002Fapi\u002Fv1')\n  .use(middleware.apiKey());\n","ts","",[283,378,379,409,434,441,448,454,490,514,523,543,548,554,559,576,609,640,647,666],{"__ignoreMap":376},[380,381,384,388,392,395,399,403,406],"span",{"class":382,"line":383},"line",1,[380,385,387],{"class":386},"s7zQu","import",[380,389,391],{"class":390},"sTEyZ"," router ",[380,393,394],{"class":386},"from",[380,396,398],{"class":397},"sMK4o"," '",[380,400,402],{"class":401},"sfazB","@adonisjs\u002Fcore\u002Fservices\u002Frouter",[380,404,405],{"class":397},"'",[380,407,408],{"class":397},";\n",[380,410,412,414,417,420,423,426,428,430,432],{"class":382,"line":411},2,[380,413,387],{"class":386},[380,415,416],{"class":397}," {",[380,418,419],{"class":390}," middleware",[380,421,422],{"class":397}," }",[380,424,425],{"class":386}," from",[380,427,398],{"class":397},[380,429,361],{"class":401},[380,431,405],{"class":397},[380,433,408],{"class":397},[380,435,437],{"class":382,"line":436},3,[380,438,440],{"emptyLinePlaceholder":439},true,"\n",[380,442,444],{"class":382,"line":443},4,[380,445,447],{"class":446},"sHwdD","\u002F\u002F Protect a single route\n",[380,449,451],{"class":382,"line":450},5,[380,452,453],{"class":390},"router\n",[380,455,457,460,464,467,469,472,474,477,481,484,487],{"class":382,"line":456},6,[380,458,459],{"class":397},"  .",[380,461,463],{"class":462},"s2Zo4","get",[380,465,466],{"class":390},"(",[380,468,405],{"class":397},[380,470,471],{"class":401},"\u002Fwebhooks\u002Fsync",[380,473,405],{"class":397},[380,475,476],{"class":397},",",[380,478,480],{"class":479},"spNyl"," async",[380,482,483],{"class":397}," ()",[380,485,486],{"class":479}," =>",[380,488,489],{"class":397}," {\n",[380,491,493,496,498,502,504,506,509,511],{"class":382,"line":492},7,[380,494,495],{"class":386},"    return",[380,497,416],{"class":397},[380,499,501],{"class":500},"swJcz"," status",[380,503,302],{"class":397},[380,505,398],{"class":397},[380,507,508],{"class":401},"ok",[380,510,405],{"class":397},[380,512,513],{"class":397}," };\n",[380,515,517,520],{"class":382,"line":516},8,[380,518,519],{"class":397},"  }",[380,521,522],{"class":390},")\n",[380,524,526,528,531,534,536,538,541],{"class":382,"line":525},9,[380,527,459],{"class":397},[380,529,530],{"class":462},"use",[380,532,533],{"class":390},"(middleware",[380,535,286],{"class":397},[380,537,338],{"class":462},[380,539,540],{"class":390},"())",[380,542,408],{"class":397},[380,544,546],{"class":382,"line":545},10,[380,547,440],{"emptyLinePlaceholder":439},[380,549,551],{"class":382,"line":550},11,[380,552,553],{"class":446},"\u002F\u002F Protect a group of routes\n",[380,555,557],{"class":382,"line":556},12,[380,558,453],{"class":390},[380,560,562,564,567,569,572,574],{"class":382,"line":561},13,[380,563,459],{"class":397},[380,565,566],{"class":462},"group",[380,568,466],{"class":390},[380,570,571],{"class":397},"()",[380,573,486],{"class":479},[380,575,489],{"class":397},[380,577,579,582,584,586,588,590,593,595,597,599,602,604,607],{"class":382,"line":578},14,[380,580,581],{"class":390},"    router",[380,583,286],{"class":397},[380,585,463],{"class":462},[380,587,466],{"class":500},[380,589,405],{"class":397},[380,591,592],{"class":401},"\u002Fusers",[380,594,405],{"class":397},[380,596,476],{"class":397},[380,598,398],{"class":397},[380,600,601],{"class":401},"#controllers\u002Fusers_controller.index",[380,603,405],{"class":397},[380,605,606],{"class":500},")",[380,608,408],{"class":397},[380,610,612,614,616,619,621,623,625,627,629,631,634,636,638],{"class":382,"line":611},15,[380,613,581],{"class":390},[380,615,286],{"class":397},[380,617,618],{"class":462},"post",[380,620,466],{"class":500},[380,622,405],{"class":397},[380,624,592],{"class":401},[380,626,405],{"class":397},[380,628,476],{"class":397},[380,630,398],{"class":397},[380,632,633],{"class":401},"#controllers\u002Fusers_controller.store",[380,635,405],{"class":397},[380,637,606],{"class":500},[380,639,408],{"class":397},[380,641,643,645],{"class":382,"line":642},16,[380,644,519],{"class":397},[380,646,522],{"class":390},[380,648,650,652,655,657,659,662,664],{"class":382,"line":649},17,[380,651,459],{"class":397},[380,653,654],{"class":462},"prefix",[380,656,466],{"class":390},[380,658,405],{"class":397},[380,660,661],{"class":401},"\u002Fapi\u002Fv1",[380,663,405],{"class":397},[380,665,522],{"class":390},[380,667,669,671,673,675,677,679,681],{"class":382,"line":668},18,[380,670,459],{"class":397},[380,672,530],{"class":462},[380,674,533],{"class":390},[380,676,286],{"class":397},[380,678,338],{"class":462},[380,680,540],{"class":390},[380,682,408],{"class":397},[288,684,686],{"id":685},"making-authenticated-requests","Making Authenticated Requests",[279,688,689,690,693],{},"Clients must include the configured header (",[283,691,692],{},"x-api-key"," by default) with the exact API key value:",[695,696,697,737],"code-group",{},[371,698,703],{"className":699,"code":700,"filename":701,"language":702,"meta":376,"style":376},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X GET http:\u002F\u002Flocalhost:3333\u002Fapi\u002Fv1\u002Fusers \\\n  -H \"x-api-key: oat_YWI.dXNlcl9zZWVkX2V4YW1wbGVfNDBfY2hhcnNfMTIzNDU2Nzg5MDEyMzQ1Ng\"\n","cURL","sh",[283,704,705,723],{"__ignoreMap":376},[380,706,707,711,714,717,720],{"class":382,"line":383},[380,708,710],{"class":709},"sBMFI","curl",[380,712,713],{"class":401}," -X",[380,715,716],{"class":401}," GET",[380,718,719],{"class":401}," http:\u002F\u002Flocalhost:3333\u002Fapi\u002Fv1\u002Fusers",[380,721,722],{"class":390}," \\\n",[380,724,725,728,731,734],{"class":382,"line":411},[380,726,727],{"class":401},"  -H",[380,729,730],{"class":397}," \"",[380,732,733],{"class":401},"x-api-key: oat_YWI.dXNlcl9zZWVkX2V4YW1wbGVfNDBfY2hhcnNfMTIzNDU2Nzg5MDEyMzQ1Ng",[380,735,736],{"class":397},"\"\n",[371,738,741],{"className":373,"code":739,"filename":740,"language":375,"meta":376,"style":376},"const response = await fetch('http:\u002F\u002Flocalhost:3333\u002Fapi\u002Fv1\u002Fusers', {\n  headers: {\n    'x-api-key': process.env.API_KEY!,\n  },\n});\n","Fetch",[283,742,743,773,782,809,814],{"__ignoreMap":376},[380,744,745,748,751,754,757,760,762,764,767,769,771],{"class":382,"line":383},[380,746,747],{"class":479},"const",[380,749,750],{"class":390}," response ",[380,752,753],{"class":397},"=",[380,755,756],{"class":386}," await",[380,758,759],{"class":462}," fetch",[380,761,466],{"class":390},[380,763,405],{"class":397},[380,765,766],{"class":401},"http:\u002F\u002Flocalhost:3333\u002Fapi\u002Fv1\u002Fusers",[380,768,405],{"class":397},[380,770,476],{"class":397},[380,772,489],{"class":397},[380,774,775,778,780],{"class":382,"line":411},[380,776,777],{"class":500},"  headers",[380,779,302],{"class":397},[380,781,489],{"class":397},[380,783,784,787,789,791,793,796,798,801,803,806],{"class":382,"line":436},[380,785,786],{"class":397},"    '",[380,788,692],{"class":500},[380,790,405],{"class":397},[380,792,302],{"class":397},[380,794,795],{"class":390}," process",[380,797,286],{"class":397},[380,799,800],{"class":390},"env",[380,802,286],{"class":397},[380,804,805],{"class":390},"API_KEY",[380,807,808],{"class":397},"!,\n",[380,810,811],{"class":382,"line":443},[380,812,813],{"class":397},"  },\n",[380,815,816,819,821],{"class":382,"line":450},[380,817,818],{"class":397},"}",[380,820,606],{"class":390},[380,822,408],{"class":397},[288,824,826,827],{"id":825},"manual-authentication-via-ctxsimpleauth","Manual Authentication via ",[283,828,285],{},[279,830,831,832,834,835,838,839,841,842,844],{},"Because ",[283,833,314],{}," augments ",[283,836,837],{},"HttpContext"," with ",[283,840,285],{},", you can call ",[283,843,343],{}," directly inside a controller action or custom middleware:",[371,846,849],{"className":373,"code":847,"filename":848,"language":375,"meta":376,"style":376},"import type { HttpContext } from '@adonisjs\u002Fcore\u002Fhttp';\n\nexport default class ReportsController {\n  async handle({ simpleAuth, response }: HttpContext) {\n    \u002F\u002F Throws SimpleAuthException (401) if the API key is missing or invalid\n    simpleAuth.authenticate();\n\n    return response.ok({ generated: true });\n  }\n}\n","app\u002Fcontrollers\u002Freports_controller.ts",[283,850,851,876,880,896,925,930,944,948,978,983],{"__ignoreMap":376},[380,852,853,855,858,860,863,865,867,869,872,874],{"class":382,"line":383},[380,854,387],{"class":386},[380,856,857],{"class":386}," type",[380,859,416],{"class":397},[380,861,862],{"class":390}," HttpContext",[380,864,422],{"class":397},[380,866,425],{"class":386},[380,868,398],{"class":397},[380,870,871],{"class":401},"@adonisjs\u002Fcore\u002Fhttp",[380,873,405],{"class":397},[380,875,408],{"class":397},[380,877,878],{"class":382,"line":411},[380,879,440],{"emptyLinePlaceholder":439},[380,881,882,885,888,891,894],{"class":382,"line":436},[380,883,884],{"class":386},"export",[380,886,887],{"class":386}," default",[380,889,890],{"class":479}," class",[380,892,893],{"class":709}," ReportsController",[380,895,489],{"class":397},[380,897,898,901,904,907,911,913,916,919,921,923],{"class":382,"line":443},[380,899,900],{"class":479},"  async",[380,902,903],{"class":500}," handle",[380,905,906],{"class":397},"({",[380,908,910],{"class":909},"sHdIc"," simpleAuth",[380,912,476],{"class":397},[380,914,915],{"class":909}," response",[380,917,918],{"class":397}," }:",[380,920,862],{"class":709},[380,922,606],{"class":397},[380,924,489],{"class":397},[380,926,927],{"class":382,"line":450},[380,928,929],{"class":446},"    \u002F\u002F Throws SimpleAuthException (401) if the API key is missing or invalid\n",[380,931,932,935,937,940,942],{"class":382,"line":456},[380,933,934],{"class":390},"    simpleAuth",[380,936,286],{"class":397},[380,938,939],{"class":462},"authenticate",[380,941,571],{"class":500},[380,943,408],{"class":397},[380,945,946],{"class":382,"line":492},[380,947,440],{"emptyLinePlaceholder":439},[380,949,950,952,954,956,958,960,963,966,968,972,974,976],{"class":382,"line":516},[380,951,495],{"class":386},[380,953,915],{"class":390},[380,955,286],{"class":397},[380,957,508],{"class":462},[380,959,466],{"class":500},[380,961,962],{"class":397},"{",[380,964,965],{"class":500}," generated",[380,967,302],{"class":397},[380,969,971],{"class":970},"sfNiH"," true",[380,973,422],{"class":397},[380,975,606],{"class":500},[380,977,408],{"class":397},[380,979,980],{"class":382,"line":525},[380,981,982],{"class":397},"  }\n",[380,984,985],{"class":382,"line":545},[380,986,987],{"class":397},"}\n",[288,989,991],{"id":990},"customizing-the-published-middleware","Customizing the Published Middleware",[279,993,831,994,997],{},[283,995,996],{},"app\u002Fmiddleware\u002Fapi_key_middleware.ts"," lives in your application codebase, you have full control over its behavior. For example, you can add logging or custom headers after authentication succeeds:",[371,999,1001],{"className":373,"code":1000,"filename":996,"language":375,"meta":376,"style":376},"import type { HttpContext } from '@adonisjs\u002Fcore\u002Fhttp';\nimport type { NextFn } from '@adonisjs\u002Fcore\u002Ftypes\u002Fhttp';\n\nexport default class ApiKeyMiddleware {\n  async handle(ctx: HttpContext, next: NextFn) {\n    ctx.simpleAuth.authenticate();\n    ctx.logger.debug('Request authenticated via API key');\n\n    return next();\n  }\n}\n",[283,1002,1003,1025,1049,1053,1066,1094,1112,1139,1143,1153,1157],{"__ignoreMap":376},[380,1004,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023],{"class":382,"line":383},[380,1006,387],{"class":386},[380,1008,857],{"class":386},[380,1010,416],{"class":397},[380,1012,862],{"class":390},[380,1014,422],{"class":397},[380,1016,425],{"class":386},[380,1018,398],{"class":397},[380,1020,871],{"class":401},[380,1022,405],{"class":397},[380,1024,408],{"class":397},[380,1026,1027,1029,1031,1033,1036,1038,1040,1042,1045,1047],{"class":382,"line":411},[380,1028,387],{"class":386},[380,1030,857],{"class":386},[380,1032,416],{"class":397},[380,1034,1035],{"class":390}," NextFn",[380,1037,422],{"class":397},[380,1039,425],{"class":386},[380,1041,398],{"class":397},[380,1043,1044],{"class":401},"@adonisjs\u002Fcore\u002Ftypes\u002Fhttp",[380,1046,405],{"class":397},[380,1048,408],{"class":397},[380,1050,1051],{"class":382,"line":436},[380,1052,440],{"emptyLinePlaceholder":439},[380,1054,1055,1057,1059,1061,1064],{"class":382,"line":443},[380,1056,884],{"class":386},[380,1058,887],{"class":386},[380,1060,890],{"class":479},[380,1062,1063],{"class":709}," ApiKeyMiddleware",[380,1065,489],{"class":397},[380,1067,1068,1070,1072,1074,1077,1079,1081,1083,1086,1088,1090,1092],{"class":382,"line":450},[380,1069,900],{"class":479},[380,1071,903],{"class":500},[380,1073,466],{"class":397},[380,1075,1076],{"class":909},"ctx",[380,1078,302],{"class":397},[380,1080,862],{"class":709},[380,1082,476],{"class":397},[380,1084,1085],{"class":909}," next",[380,1087,302],{"class":397},[380,1089,1035],{"class":709},[380,1091,606],{"class":397},[380,1093,489],{"class":397},[380,1095,1096,1099,1101,1104,1106,1108,1110],{"class":382,"line":456},[380,1097,1098],{"class":390},"    ctx",[380,1100,286],{"class":397},[380,1102,1103],{"class":390},"simpleAuth",[380,1105,286],{"class":397},[380,1107,939],{"class":462},[380,1109,571],{"class":500},[380,1111,408],{"class":397},[380,1113,1114,1116,1118,1121,1123,1126,1128,1130,1133,1135,1137],{"class":382,"line":492},[380,1115,1098],{"class":390},[380,1117,286],{"class":397},[380,1119,1120],{"class":390},"logger",[380,1122,286],{"class":397},[380,1124,1125],{"class":462},"debug",[380,1127,466],{"class":500},[380,1129,405],{"class":397},[380,1131,1132],{"class":401},"Request authenticated via API key",[380,1134,405],{"class":397},[380,1136,606],{"class":500},[380,1138,408],{"class":397},[380,1140,1141],{"class":382,"line":516},[380,1142,440],{"emptyLinePlaceholder":439},[380,1144,1145,1147,1149,1151],{"class":382,"line":525},[380,1146,495],{"class":386},[380,1148,1085],{"class":462},[380,1150,571],{"class":500},[380,1152,408],{"class":397},[380,1154,1155],{"class":382,"line":545},[380,1156,982],{"class":397},[380,1158,1159],{"class":382,"line":550},[380,1160,987],{"class":397},[279,1162,1163,1164,286],{},"To learn how authentication failures are formatted and how to translate error messages, see ",[296,1165,230],{"href":231},[1167,1168,1169],"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 .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 .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 pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":376,"searchDepth":383,"depth":411,"links":1171},[1172,1173,1175,1176,1178],{"id":290,"depth":411,"text":291},{"id":347,"depth":411,"text":1174},"Using the apiKey Middleware",{"id":685,"depth":411,"text":686},{"id":825,"depth":411,"text":1177},"Manual Authentication via ctx.simpleAuth",{"id":990,"depth":411,"text":991},"Authenticate incoming HTTP requests using the apiKey middleware or ctx.simpleAuth.","md",{},{"icon":228},{"title":225,"description":1179},"rl61-nUImV571WH2X0_zjCv4jkIfSBaYIqW7otvQmu8",[1186,1188],{"title":220,"path":221,"stem":222,"description":1187,"icon":223,"children":-1},"Generate cryptographically secure API keys with the generate:api-key Ace command.",{"title":230,"path":231,"stem":232,"description":1189,"icon":107,"children":-1},"Understand how SimpleAuthException handles 401 Unauthorized responses and i18n translations.",{"id":1191,"extension":1192,"meta":1193,"packages":1194,"stem":1237,"__hash__":1238},"packages\u002Fdata\u002Fpackages.json","json",{},[1195,1202,1208,1214,1219,1225,1231],{"name":1196,"title":1197,"description":1198,"icon":86,"category":1199,"repo":1200,"version":1201,"docs":439},"adonisjs-permission","Permission","Associate users with roles and permissions in your AdonisJS app","adonisjs","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-permission","1.0.0",{"name":1203,"title":1204,"description":1205,"icon":33,"category":1199,"repo":1206,"version":1207,"docs":439},"adonisjs-api-query","API Query","Easily build Lucid queries from API requests","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-api-query","3.0.1",{"name":1209,"title":1210,"description":1211,"icon":249,"category":1199,"repo":1212,"version":1213,"docs":439},"adonisjs-soft-deletes","Soft Deletes","Provider-based Soft deletes for AdonisJS","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-soft-deletes","1.0.2",{"name":1215,"title":195,"description":1216,"icon":196,"category":1199,"repo":1217,"version":1218,"docs":439},"adonisjs-simple-auth","Single API key authentication for AdonisJS v7 applications","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-simple-auth","2.1.0",{"name":1220,"title":1221,"description":1222,"icon":1223,"category":1199,"repo":1224,"docs":22},"adonisjs-sentry","Sentry","Sentry service provider for AdonisJS v7.","i-tabler-bug","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-sentry",{"name":1226,"title":1227,"description":1228,"icon":141,"category":1229,"repo":1230,"docs":22},"eslint-config","ESLint Config","The EienJS ESLint config preset.","tooling","https:\u002F\u002Fgithub.com\u002Feienjs\u002Feslint-config",{"name":1232,"title":1233,"description":1234,"icon":1235,"category":1229,"repo":1236,"docs":22},"adonisjs-pkg-boilerplate","Package Boilerplate","A boilerplate for creating AdonisJS packages.","i-tabler-package","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-pkg-boilerplate","data\u002Fpackages","5fILU7Jigsw2ib-NQg4Fr4sWgIkg0kLgpVm371gTzVY",1793868428466]