From cd80fbce3d4a44cb453d16cdb2362b71bc7e2ac1 Mon Sep 17 00:00:00 2001 From: MrMaz Date: Wed, 12 Jun 2024 16:49:12 +0000 Subject: [PATCH] deploy: 018971267fbd6b716e53d32d8a296dcbc9414495 --- 404.html | 2 +- .../{4294-2f4fb656a61708e6.js => 4294-e1e48831c31a8f07.js} | 2 +- ...c_list-a4ebe265511c52ad.js => _toc_list-153f9cf9fc110014.js} | 2 +- .../api/authentication/nestjs-auth-local-7b24a2bcadc7063b.js | 1 + .../api/authentication/nestjs-auth-local-f28088acf9c75f11.js | 1 - .../_buildManifest.js | 2 +- .../_middlewareManifest.js | 0 .../_ssgManifest.js | 0 documentation/api/_toc_list.html | 2 +- documentation/api/authentication/_toc_list.html | 2 +- documentation/api/authentication/nestjs-auth-github.html | 2 +- documentation/api/authentication/nestjs-auth-local.html | 2 +- documentation/api/authentication/nestjs-auth-refresh.html | 2 +- documentation/api/authentication/nestjs-authentication.html | 2 +- documentation/api/authorization/_toc_list.html | 2 +- documentation/api/authorization/nestjs-access-control.html | 2 +- documentation/api/authorization/nestjs-auth-jwt.html | 2 +- documentation/api/controller/_toc_list.html | 2 +- documentation/api/controller/nestjs-crud.html | 2 +- documentation/api/controller/nestjs-swagger-ui.html | 2 +- documentation/api/core/_toc_list.html | 2 +- documentation/api/core/nestjs-common.html | 2 +- documentation/api/core/nestjs-core.html | 2 +- documentation/api/core/nestjs-event.html | 2 +- documentation/api/core/nestjs-exception.html | 2 +- documentation/api/core/nestjs-typeorm-ext.html | 2 +- documentation/api/model/_toc_list.html | 2 +- documentation/api/model/nestjs-user.html | 2 +- documentation/api/notification/_toc_list.html | 2 +- documentation/api/notification/nestjs-email.html | 2 +- documentation/api/util/_toc_list.html | 2 +- documentation/api/util/nestjs-jwt.html | 2 +- documentation/api/util/nestjs-logger.html | 2 +- documentation/api/util/nestjs-password.html | 2 +- documentation/getting-started.html | 2 +- index.html | 2 +- 36 files changed, 33 insertions(+), 33 deletions(-) rename _next/static/chunks/{4294-2f4fb656a61708e6.js => 4294-e1e48831c31a8f07.js} (74%) rename _next/static/chunks/pages/documentation/api/authentication/{_toc_list-a4ebe265511c52ad.js => _toc_list-153f9cf9fc110014.js} (90%) create mode 100644 _next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-7b24a2bcadc7063b.js delete mode 100644 _next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-f28088acf9c75f11.js rename _next/static/{g7esqge5Rb2gOEYyhm1q7 => zlMRIyGhguIjxLJ5yF033}/_buildManifest.js (96%) rename _next/static/{g7esqge5Rb2gOEYyhm1q7 => zlMRIyGhguIjxLJ5yF033}/_middlewareManifest.js (100%) rename _next/static/{g7esqge5Rb2gOEYyhm1q7 => zlMRIyGhguIjxLJ5yF033}/_ssgManifest.js (100%) diff --git a/404.html b/404.html index 16f87a99c..1dc174a5a 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/_next/static/chunks/4294-2f4fb656a61708e6.js b/_next/static/chunks/4294-e1e48831c31a8f07.js similarity index 74% rename from _next/static/chunks/4294-2f4fb656a61708e6.js rename to _next/static/chunks/4294-e1e48831c31a8f07.js index b40ded1c9..92853df4a 100644 --- a/_next/static/chunks/4294-2f4fb656a61708e6.js +++ b/_next/static/chunks/4294-e1e48831c31a8f07.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4294],{3962:function(t,e,n){n.d(e,{Z:function(){return a}});var i=n(5893),o=(n(6428),n(2076));var s=function(){return(0,i.jsx)(o.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},a={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,i.jsx)(s,{}),titleSuffix:" \u2013 Rockets",logo:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,i.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,i.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,i.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,i.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,i.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,i.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,i.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,i.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,i.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,i.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,i.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,i.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,i.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,i.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,i.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,i.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,i.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,i.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,i.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,i.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,i.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,i.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,i.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,i.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("span",{children:["2022 \xa9 ",(0,i.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},4294:function(t,e,n){n.r(e),n.d(e,{default:function(){return j}});var i=n(5893),o=n(7270),s=n(3805),a=n(3962),r=n(1151);function c(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=function(){var e=Object.assign({ul:"ul",li:"li",a:"a"},(0,r.ah)(),t.components);return(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["Core","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-core",title:"nestjs-core",children:"nestjs-core"}),"- The core module is a dependency of all Rockets modules."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-common",title:"nestjs-common",children:"nestjs-common"}),"- The common module contains commonly used utilities, DTOs, etc."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-exception",title:"nestjs-exception",children:"nestjs-exception"}),"- Provide exception handling/normalization and error code mapping."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-event",title:"nestjs-event",children:"nestjs-event"}),"- Advanced class based event dispatch/listener module."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-typeorm-ext",title:"nestjs-typeorm-ext",children:"nestjs-typeorm-ext"}),"- Extremely powerful extension of the NestJS TypeOrm module that allows your\ndynamic modules to accept drop-in replacements of custom entities\nand repositories at registration time."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Authentication","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-authentication",title:"nestjs-authentication",children:"nestjs-authentication"}),"- Authenticate requests using one or more strategies (local, jwt, etc)."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-local",title:"nestjs-auth-local",children:"nestjs-auth-local"}),"- Authenticate requests using username/email and password against a local or remote data source."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-refresh",title:"nestjs-auth-refresh",children:"nestjs-auth-refresh"}),"- Authenticate requests using JWT refresh tokens passed via the request (headers, cookies, body, query, etc)."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-github",title:"nestjs-auth-github",children:"nestjs-auth-github"}),"- Authenticate requests using GitHub OAuth2"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Authorization","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authorization/nestjs-auth-jwt",title:"nestjs-auth-jwt",children:"nestjs-auth-jwt"}),"- Authenticate requests using JWT tokens passed via the request (headers, cookies, body, query, etc)."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authorization/nestjs-access-control",title:"nestjs-access-control",children:"nestjs-access-control"}),"- Advanced access control guard for NestJS with optional per-request filtering."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Controller","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/controller/nestjs-crud",title:"nestjs-crud",children:"nestjs-crud"}),"- Extremely powerful CRUD module that is an extension/wrapper of the popular "]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/controller/nestjs-swagger-ui",title:"nestjs-swagger-ui",children:"nestjs-swagger-ui"}),"- Expose your OpenApi spec on your API using the powerful Swagger UI interface."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Model","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/model/nestjs-user",title:"nestjs-user",children:"nestjs-user"}),"- A module for managing a basic User entity, including controller with full CRUD, DTOs, sample data factory and seeder."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Notification","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/notification/nestjs-email",title:"nestjs-email",children:"nestjs-email"}),"- Email deliver module that supports the popular "]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Utilities","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/util/nestjs-jwt",title:"nestjs-jwt",children:"nestjs-jwt"}),"- A flexible JWT utilities module for signing and validating tokens."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/util/nestjs-logger",title:"nestjs-logger",children:"nestjs-logger"}),"- This module is a drop-in replacement for the core NestJS logger that provides additonal support for pushing log data\nto one or multiple external log consumption providers."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/util/nestjs-password",title:"nestjs-password",children:"nestjs-password"}),"- A flexible Password utilities module that provides services for password strength, creation and storage."]}),"\n"]}),"\n"]}),"\n"]})},n=Object.assign({},(0,r.ah)(),t.components),o=n.wrapper;return o?(0,i.jsx)(o,l({},t,{children:(0,i.jsx)(e,{})})):e()}function j(t){return(0,i.jsx)(d,l({},t,{children:m}))}j.getLayout=d.withLayout}}]); \ No newline at end of file +"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4294],{3962:function(t,e,n){n.d(e,{Z:function(){return a}});var i=n(5893),o=(n(6428),n(2076));var s=function(){return(0,i.jsx)(o.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},a={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,i.jsx)(s,{}),titleSuffix:" \u2013 Rockets",logo:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,i.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,i.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,i.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,i.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,i.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,i.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,i.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,i.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,i.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,i.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,i.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,i.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,i.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,i.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,i.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,i.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,i.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,i.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,i.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,i.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,i.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,i.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,i.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,i.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("span",{children:["2022 \xa9 ",(0,i.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},4294:function(t,e,n){n.r(e),n.d(e,{default:function(){return j}});var i=n(5893),o=n(7270),s=n(3805),a=n(3962),r=n(1151);function c(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=function(){var e=Object.assign({ul:"ul",li:"li",a:"a"},(0,r.ah)(),t.components);return(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["Core","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-core",title:"nestjs-core",children:"nestjs-core"}),"- The core module is a dependency of all Rockets modules."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-common",title:"nestjs-common",children:"nestjs-common"}),"- The common module contains commonly used utilities, DTOs, etc."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-exception",title:"nestjs-exception",children:"nestjs-exception"}),"- Provide exception handling/normalization and error code mapping."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-event",title:"nestjs-event",children:"nestjs-event"}),"- Advanced class based event dispatch/listener module."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/core/nestjs-typeorm-ext",title:"nestjs-typeorm-ext",children:"nestjs-typeorm-ext"}),"- Extremely powerful extension of the NestJS TypeOrm module that allows your\ndynamic modules to accept drop-in replacements of custom entities\nand repositories at registration time."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Authentication","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-authentication",title:"nestjs-authentication",children:"nestjs-authentication"}),"- Authenticate requests using one or more strategies (local, jwt, etc)."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-local",title:"nestjs-auth-local",children:"nestjs-auth-local"}),"- Authenticate requests using username/email and password against a local or\nremote data source."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-refresh",title:"nestjs-auth-refresh",children:"nestjs-auth-refresh"}),"- Authenticate requests using JWT refresh tokens passed via the request (headers, cookies, body, query, etc)."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-github",title:"nestjs-auth-github",children:"nestjs-auth-github"}),"- Authenticate requests using GitHub OAuth2"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Authorization","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authorization/nestjs-auth-jwt",title:"nestjs-auth-jwt",children:"nestjs-auth-jwt"}),"- Authenticate requests using JWT tokens passed via the request (headers, cookies, body, query, etc)."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/authorization/nestjs-access-control",title:"nestjs-access-control",children:"nestjs-access-control"}),"- Advanced access control guard for NestJS with optional per-request filtering."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Controller","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/controller/nestjs-crud",title:"nestjs-crud",children:"nestjs-crud"}),"- Extremely powerful CRUD module that is an extension/wrapper of the popular "]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/controller/nestjs-swagger-ui",title:"nestjs-swagger-ui",children:"nestjs-swagger-ui"}),"- Expose your OpenApi spec on your API using the powerful Swagger UI interface."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Model","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/model/nestjs-user",title:"nestjs-user",children:"nestjs-user"}),"- A module for managing a basic User entity, including controller with full CRUD, DTOs, sample data factory and seeder."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Notification","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/notification/nestjs-email",title:"nestjs-email",children:"nestjs-email"}),"- Email deliver module that supports the popular "]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Utilities","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/util/nestjs-jwt",title:"nestjs-jwt",children:"nestjs-jwt"}),"- A flexible JWT utilities module for signing and validating tokens."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/util/nestjs-logger",title:"nestjs-logger",children:"nestjs-logger"}),"- This module is a drop-in replacement for the core NestJS logger that provides additonal support for pushing log data\nto one or multiple external log consumption providers."]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"/documentation/api/util/nestjs-password",title:"nestjs-password",children:"nestjs-password"}),"- A flexible Password utilities module that provides services for password strength, creation and storage."]}),"\n"]}),"\n"]}),"\n"]})},n=Object.assign({},(0,r.ah)(),t.components),o=n.wrapper;return o?(0,i.jsx)(o,l({},t,{children:(0,i.jsx)(e,{})})):e()}function j(t){return(0,i.jsx)(d,l({},t,{children:m}))}j.getLayout=d.withLayout}}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/documentation/api/authentication/_toc_list-a4ebe265511c52ad.js b/_next/static/chunks/pages/documentation/api/authentication/_toc_list-153f9cf9fc110014.js similarity index 90% rename from _next/static/chunks/pages/documentation/api/authentication/_toc_list-a4ebe265511c52ad.js rename to _next/static/chunks/pages/documentation/api/authentication/_toc_list-153f9cf9fc110014.js index e63b5b9ef..552700e44 100644 --- a/_next/static/chunks/pages/documentation/api/authentication/_toc_list-a4ebe265511c52ad.js +++ b/_next/static/chunks/pages/documentation/api/authentication/_toc_list-153f9cf9fc110014.js @@ -1 +1 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[15],{8961:function(t,e,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/api/authentication/_toc_list",function(){return n(5417)}])},3962:function(t,e,n){"use strict";n.d(e,{Z:function(){return s}});var o=n(5893),a=(n(6428),n(2076));var i=function(){return(0,o.jsx)(a.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},s={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,o.jsx)(i,{}),titleSuffix:" \u2013 Rockets",logo:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,o.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,o.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,o.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,o.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,o.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,o.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,o.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,o.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,o.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,o.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,o.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,o.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)("span",{children:["2022 \xa9 ",(0,o.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},5417:function(t,e,n){"use strict";n.r(e),n.d(e,{default:function(){return d}});var o=n(5893),a=n(7270),i=n(3805),s=n(3962),c=n(1151);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function u(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=function(){var e=Object.assign({ul:"ul",li:"li",a:"a"},(0,c.ah)(),t.components);return(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-authentication",title:"nestjs-authentication",children:"nestjs-authentication"}),"- Authenticate requests using one or more strategies (local, jwt, etc)."]}),"\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-local",title:"nestjs-auth-local",children:"nestjs-auth-local"}),"- Authenticate requests using username/email and password against a local or remote data source."]}),"\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-refresh",title:"nestjs-auth-refresh",children:"nestjs-auth-refresh"}),"- Authenticate requests using JWT refresh tokens passed via the request (headers, cookies, body, query, etc)."]}),"\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-github",title:"nestjs-auth-github",children:"nestjs-auth-github"}),"- Authenticate requests using GitHub OAuth2"]}),"\n"]})},n=Object.assign({},(0,c.ah)(),t.components),a=n.wrapper;return a?(0,o.jsx)(a,u({},t,{children:(0,o.jsx)(e,{})})):e()}function d(t){return(0,o.jsx)(h,u({},t,{children:m}))}d.getLayout=h.withLayout}},function(t){t.O(0,[4936,9774,2888,179],(function(){return e=8961,t(t.s=e);var e}));var e=t.O();_N_E=e}]); \ No newline at end of file +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[15],{8961:function(t,e,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/api/authentication/_toc_list",function(){return n(5417)}])},3962:function(t,e,n){"use strict";n.d(e,{Z:function(){return s}});var o=n(5893),a=(n(6428),n(2076));var i=function(){return(0,o.jsx)(a.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},s={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,o.jsx)(i,{}),titleSuffix:" \u2013 Rockets",logo:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,o.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,o.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,o.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,o.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,o.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,o.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,o.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,o.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,o.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,o.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,o.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,o.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)("span",{children:["2022 \xa9 ",(0,o.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},5417:function(t,e,n){"use strict";n.r(e),n.d(e,{default:function(){return d}});var o=n(5893),a=n(7270),i=n(3805),s=n(3962),c=n(1151);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function u(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=function(){var e=Object.assign({ul:"ul",li:"li",a:"a"},(0,c.ah)(),t.components);return(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-authentication",title:"nestjs-authentication",children:"nestjs-authentication"}),"- Authenticate requests using one or more strategies (local, jwt, etc)."]}),"\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-local",title:"nestjs-auth-local",children:"nestjs-auth-local"}),"- Authenticate requests using username/email and password against a local or\nremote data source."]}),"\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-refresh",title:"nestjs-auth-refresh",children:"nestjs-auth-refresh"}),"- Authenticate requests using JWT refresh tokens passed via the request (headers, cookies, body, query, etc)."]}),"\n",(0,o.jsxs)(e.li,{children:[(0,o.jsx)(e.a,{href:"/documentation/api/authentication/nestjs-auth-github",title:"nestjs-auth-github",children:"nestjs-auth-github"}),"- Authenticate requests using GitHub OAuth2"]}),"\n"]})},n=Object.assign({},(0,c.ah)(),t.components),a=n.wrapper;return a?(0,o.jsx)(a,u({},t,{children:(0,o.jsx)(e,{})})):e()}function d(t){return(0,o.jsx)(h,u({},t,{children:m}))}d.getLayout=h.withLayout}},function(t){t.O(0,[4936,9774,2888,179],(function(){return e=8961,t(t.s=e);var e}));var e=t.O();_N_E=e}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-7b24a2bcadc7063b.js b/_next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-7b24a2bcadc7063b.js new file mode 100644 index 000000000..be5812cb6 --- /dev/null +++ b/_next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-7b24a2bcadc7063b.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1407],{9865:function(e,s,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/api/authentication/nestjs-auth-local",function(){return n(5281)}])},3962:function(e,s,n){"use strict";n.d(s,{Z:function(){return r}});var o=n(5893),l=(n(6428),n(2076));var i=function(){return(0,o.jsx)(l.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},r={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,o.jsx)(i,{}),titleSuffix:" \u2013 Rockets",logo:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,o.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,o.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,o.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,o.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,o.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,o.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,o.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,o.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,o.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,o.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,o.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,o.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)("span",{children:["2022 \xa9 ",(0,o.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},5281:function(e,s,n){"use strict";n.r(s),n.d(s,{default:function(){return j}});var o=n(5893),l=n(7270),i=n(3805),r=n(3962),t=n(1151);function a(e,s,n){return s in e?Object.defineProperty(e,s,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[s]=n,e}function c(e){for(var s=1;s0&&void 0!==arguments[0]?arguments[0]:{},s=function(){var s=Object.assign({h1:"h1",p:"p",h2:"h2",ul:"ul",li:"li",a:"a",h3:"h3",h4:"h4",h5:"h5",code:"code",strong:"strong",div:"div",pre:"pre",span:"span",blockquote:"blockquote",ol:"ol"},(0,t.ah)(),e.components);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{children:"Rockets NestJS Local Authentication"}),"\n",(0,o.jsx)(s.p,{children:"Authenticate requests using username/email and password against a local or\nremote data source."}),"\n",(0,o.jsx)(s.h2,{id:"project",children:"Project"}),"\n",(0,o.jsx)(s.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#tutorials",children:"Tutorials"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#1-getting-started-with-authlocalmodule",children:"1. Getting Started with AuthLocalModule"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#11-introduction",children:"1.1 Introduction"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#overview-of-the-library",children:"Overview of the Library"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#purpose-and-key-features",children:"Purpose and Key Features"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#12-installation",children:"1.2 Installation"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#install-the-authlocalmodule-package",children:"Install the AuthLocalModule package"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#add-the-authlocalmodule-to-your-nestjs-application",children:"Add the AuthLocalModule to Your NestJS Application"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#13-basic-setup-in-a-nestjs-project",children:"1.3 Basic Setup in a NestJS Project"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#scenario-users-can-log-in-using-local-authentication",children:"Scenario: Users can log in using local authentication"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-1-create-entities",children:"Step 1: Create Entities"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-2-create-services",children:"Step 2: Create Services"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-3-configure-the-module",children:"Step 3: Configure the Module"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#validating-the-setup",children:"Validating the Setup"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#how-to-guides",children:"How-To Guides"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#1-registering-authlocalmodule-synchronously",children:"1. Registering AuthLocalModule Synchronously"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#2-registering-authlocalmodule-asynchronously",children:"2. Registering AuthLocalModule Asynchronously"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#3-global-registering-authlocalmodule-asynchronously",children:"3. Global Registering AuthLocalModule Asynchronously"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#4-implementing-user-lookup-service",children:"4. Implementing User Lookup Service"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#5-implementing-custom-token-issuance-service",children:"5. Implementing custom token issuance service"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#6-implementing-a-custom-user-validation-service",children:"6. Implementing a custom user validation service"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#7-implementing-a-custom-password-validation-service",children:"7. Implementing a custom password validation service"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#8-overriding-the-settings",children:"8. Overriding the Settings"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#9-integration-with-other-nestjs-modules",children:"9. Integration with Other NestJS Modules"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#reference",children:"Reference"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#1-explanation-of-properties-in-authlocaloptionsinterface",children:"1. Explanation of Properties in AuthLocalOptionsInterface"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#2-authlocalmodule-api-reference",children:"2. AuthLocalModule API Reference"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#explanation",children:"Explanation"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#conceptual-overview-of-local-authentication",children:"Conceptual Overview of Local Authentication"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#what-is-local-authentication",children:"What is Local Authentication?"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#benefits-of-using-local-authentication",children:"Benefits of Using Local Authentication"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#design-choices-in-authlocalmodule",children:"Design Choices in AuthLocalModule"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#why-use-local-authentication",children:"Why Use Local Authentication?"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#synchronous-vs-asynchronous-registration",children:"Synchronous vs Asynchronous Registration"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#global-vs-feature-specific-registration",children:"Global vs Feature-Specific Registration"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"tutorials",children:"Tutorials"}),"\n",(0,o.jsx)(s.h3,{id:"1-getting-started-with-authlocalmodule",children:"1. Getting Started with AuthLocalModule"}),"\n",(0,o.jsx)(s.h4,{id:"11-introduction",children:"1.1 Introduction"}),"\n",(0,o.jsx)(s.h5,{id:"overview-of-the-library",children:"Overview of the Library"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"AuthLocalModule"})," is a robust NestJS module designed for implementing\nlocal authentication using username and password. This module leverages the\n",(0,o.jsx)(s.a,{href:"https://www.passportjs.org/packages/passport-local",children:(0,o.jsx)(s.code,{children:"passport-local"})})," strategy\nto authenticate users locally within your application."]}),"\n",(0,o.jsx)(s.h5,{id:"purpose-and-key-features",children:"Purpose and Key Features"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Local Authentication"}),": Provides a straightforward way to implement local\nauthentication using username and password."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Synchronous and Asynchronous Registration"}),": Flexibly register the module\neither synchronously or asynchronously, depending on your application's needs."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Global and Feature-Specific Registration"}),": Use the module globally across\nyour application or tailor it for specific features."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Customizable"}),": Easily customize various aspects such as user validation,\ntoken issuance, and password validation."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h4,{id:"12-installation",children:"1.2 Installation"}),"\n",(0,o.jsx)(s.h5,{id:"install-the-authlocalmodule-package",children:"Install the AuthLocalModule package:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"sh","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install class-transformer"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install class-validator"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/ts-core"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/nestjs-authentication"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/nestjs-password"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/nestjs-jwt"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/nestjs-auth-local"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"or"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add class-transformer"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add class-validator"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/ts-core"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/nestjs-authentication"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/nestjs-password"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/nestjs-jwt"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/nestjs-auth-local"})}),"\n",(0,o.jsx)(s.span,{className:"line"})]})})}),"\n",(0,o.jsx)(s.h5,{id:"add-the-authlocalmodule-to-your-nestjs-application",children:"Add the AuthLocalModule to Your NestJS Application:"}),"\n",(0,o.jsxs)(s.p,{children:["Import the ",(0,o.jsx)(s.code,{children:"AuthLocalModule"})," and required services in your application module.\nEnsure to provide the necessary configuration options at\n",(0,o.jsx)(s.code,{children:"AuthLocalOptionsInterface"}),"."]}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"AuthLocalOptionsInterface"})," defines the configuration options for the\nlocal authentication strategy within a NestJS application using the\n",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-local"})," package. This interface allows for the customization\nof ",(0,o.jsx)(s.code,{children:"userLookupService"}),", ",(0,o.jsx)(s.code,{children:"issueTokenService"}),", ",(0,o.jsx)(s.code,{children:"validateUserService"}),", and\n",(0,o.jsx)(s.code,{children:"passwordValidationService"}),". Please see ",(0,o.jsx)(s.a,{href:"#reference",children:"Reference"})," for more\ndetails."]}),"\n",(0,o.jsx)(s.p,{children:"Optional fields utilize default implementations, enabling straightforward\nintegration and flexibility to override with custom implementations as needed.\nThis setup ensures that developers can tailor the authentication process to\nspecific requirements while maintaining a robust and secure authentication\nframework."}),"\n",(0,o.jsx)(s.h4,{id:"13-basic-setup-in-a-nestjs-project",children:"1.3 Basic Setup in a NestJS Project"}),"\n",(0,o.jsx)(s.h5,{id:"scenario-users-can-log-in-using-local-authentication",children:"Scenario: Users can log in using local authentication"}),"\n",(0,o.jsx)(s.p,{children:"To test this scenario, we will set up an application where users can log\nin using a username and password. We will create the necessary entities, services, module configurations."}),"\n",(0,o.jsxs)(s.blockquote,{children:["\n",(0,o.jsxs)(s.p,{children:["Note: The ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-user"})," module can be used in place of our example ",(0,o.jsx)(s.code,{children:"User"})," related prerequisites."]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"step-1-create-entities",children:"Step 1: Create Entities"}),"\n",(0,o.jsxs)(s.p,{children:["First, create the ",(0,o.jsx)(s.code,{children:"User"})," entity."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// user.entity.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"number"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" username"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" password"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h2,{id:"step-2-create-services",children:"Step 2: Create Services"}),"\n",(0,o.jsxs)(s.p,{children:["Next, you need to create the ",(0,o.jsx)(s.code,{children:"UserLookupService"}),". This\nservice is responsible for the business logic related to\nretrieving user data. It should implement the\n",(0,o.jsx)(s.code,{children:"AuthLocalUserLookupServiceInterface"}),"."]}),"\n",(0,o.jsxs)(s.p,{children:["Within this service, implement the ",(0,o.jsx)(s.code,{children:"byUsername"})," method to\nfetch user details by their username (or email). Ensure that\nthe method returns a ",(0,o.jsx)(s.code,{children:"User"})," object containing ",(0,o.jsx)(s.code,{children:"passwordHash"})," and\n",(0,o.jsx)(s.code,{children:"passwordSalt"}),"."]}),"\n",(0,o.jsxs)(s.p,{children:["These attributes are crucial as they are used by the\n",(0,o.jsx)(s.code,{children:"validateUser"})," method in the ",(0,o.jsx)(s.code,{children:"passwordValidationService"}),"\nto authenticate the user, which is a configurable option\nin the ",(0,o.jsx)(s.code,{children:"AuthLocalModule"}),"."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// user-lookup.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ReferenceUsername } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/ts-core'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthLocalUserLookupServiceInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-local'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthLocalCredentialsInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-local/dist/interfaces/auth-local-credentials.interface'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalUserLookupServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"byUsername"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" username"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceUsername"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalCredentialsInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"null"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// make sure this method will return a valid user with"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// correct passwordHash and passwordSalt"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// let's user this mock data for the purposes of this tutorial"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'5b3f5fd3-9426-4c4d-a06d-b4d55079034d'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" username"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" username"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordHash"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'$2b$12$9rQ4qZx8gpTaTR4ic3LQ.OkebyVBa48DP42jErL1zfqF17WeG4hHC'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordSalt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'$2b$12$9rQ4qZx8gpTaTR4ic3LQ.O'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" active"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"true"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" };"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h2,{id:"step-3-configure-the-module",children:"Step 3: Configure the Module"}),"\n",(0,o.jsxs)(s.p,{children:["Configure the module to include the necessary services ",(0,o.jsx)(s.code,{children:"userLookupService"}),"."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// app.module.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Module } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthLocalModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-local'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { JwtModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { UserLookupService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user-lookup.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Module"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" imports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ["})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRoot"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthLocalModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRoot"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" controllers"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" []"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" providers"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" []"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AppModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {}"})]})]})})}),"\n",(0,o.jsx)(s.h2,{id:"validating-the-setup",children:"Validating the Setup"}),"\n",(0,o.jsxs)(s.p,{children:["To validate the setup, you can use ",(0,o.jsx)(s.code,{children:"curl"})," commands to simulate frontend\nrequests. Here are the steps to test the login endpoint:"]}),"\n",(0,o.jsx)(s.h3,{id:"step-1-obtain-a-jwt-token",children:"Step 1: Obtain a JWT Token"}),"\n",(0,o.jsxs)(s.p,{children:["Assuming you have an endpoint to obtain a JWT token, use ",(0,o.jsx)(s.code,{children:"curl"})," to get\nthe token. Replace ",(0,o.jsx)(s.code,{children:"auth-url"})," with your actual authentication URL, and\n",(0,o.jsx)(s.code,{children:"username"})," and ",(0,o.jsx)(s.code,{children:"password"})," with valid credentials."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"sh","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"curl -X POST http://localhost:3000/auth/login \\"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -H "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Content-Type: application/json"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -d "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'\'{"username": "testuser", "password": "testpassword"}\''})]})]})})}),"\n",(0,o.jsx)(s.p,{children:"This should return a response with a login message."}),"\n",(0,o.jsx)(s.h3,{id:"example",children:"Example"}),"\n",(0,o.jsxs)(s.p,{children:["Here is an example sequence of ",(0,o.jsx)(s.code,{children:"curl"})," commands to validate the login setup:"]}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.strong,{children:"Login Request:"})}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"Command:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"sh","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"curl -X POST http://localhost:3000/auth/login \\"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -H "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Content-Type: application/json"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -d "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'\'{"username": "username", "password": "Test1234"}\''})]})]})})}),"\n",(0,o.jsx)(s.p,{children:"Response (example):"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"json","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"{"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"accessToken"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0NjZkMTAyNS1iZGNkLTRiNWItYTYxMi0yYThiZTU2MDhlNjIiLCJpYXQiOjE3MTgwNDg1NDQsImV4cCI6MTcxODA1MjE0NH0.Zl2i59w89cgJxfI4lXn6VmOhC5GLEqMm2nWkiVKpEUs"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"refreshToken"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0NjZkMTAyNS1iZGNkLTRiNWItYTYxMi0yYThiZTU2MDhlNjIiLCJpYXQiOjE3MTgwNDg1NDQsImV4cCI6NDg0MjI1MDk0NH0.xEF7kObwkztrMF7J83S-xvDarABmjXYkqLFINPWbx6g"'})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsxs)(s.ol,{start:"2",children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.strong,{children:"Invalid Credentials Request:"})}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"Command:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"sh","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"curl -X POST http://localhost:3000/auth/login \\"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -H "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Content-Type: application/json"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -d "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'\'{"username": "testuser", "password": "wrongpassword"}\''})]})]})})}),"\n",(0,o.jsx)(s.p,{children:"Response (example):"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"json","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"{"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"statusCode"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"401"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"message"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Unauthorized"'})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h2,{id:"how-to-guides",children:"How-To Guides"}),"\n",(0,o.jsx)(s.h3,{id:"1-registering-authlocalmodule-synchronously",children:"1. Registering AuthLocalModule Synchronously"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// app.module.ts"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"//..."})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthLocalModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".register"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyUserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// required"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"//..."})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"2-registering-authlocalmodule-asynchronously",children:"2. Registering AuthLocalModule Asynchronously"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// app.module.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { MyUserLookupService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./services/my-user-lookup.service.ts'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"//..."})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthLocalModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".registerAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyUserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// required"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [MyUserLookupService]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"//..."})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"3-global-registering-authlocalmodule-asynchronously",children:"3. Global Registering AuthLocalModule Asynchronously"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// app.module.ts"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"//..."})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthLocalModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRootAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyUserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [MyUserLookupService]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"//..."})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"4-implementing-user-lookup-service",children:"4. Implementing User Lookup Service"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// my-user-lookup.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" AuthLocalUserLookupServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" AuthLocalCredentialsInterface"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"} "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-local'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyUserLookupService"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalUserLookupServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"byUsername"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(username"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalCredentialsInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"null"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// implement custom logic to return the user's credentials"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"null"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"5-implementing-custom-token-issuance-service",children:"5. Implementing custom token issuance service"}),"\n",(0,o.jsx)(s.p,{children:"There are two ways to implementing the custom token issue service. You can\ntake advantage of the default service, as seen here:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// my-jwt-issue.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" JwtIssueService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" JwtIssueServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" JwtSignService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"} "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyJwtIssueService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"extends"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtIssueService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"constructor"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"protected"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"readonly"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwtSignService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtSignService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(jwtSignService);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"accessToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"..."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"args"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Parameters"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtIssueServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'accessToken'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]>"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// your custom code"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super.accessToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"..."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"args);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"refreshToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"..."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"args"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Parameters"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtIssueServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'refreshToken'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]>"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// your custom code"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super.refreshToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"..."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"args);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.p,{children:"Or you can completely replace the default implementation:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// my-jwt-issue.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { JwtIssueServiceInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyJwtIssueService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtIssueServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"constructor"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"() {}"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"accessToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"..."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"args"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Parameters"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtIssueServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'accessToken'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]>"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// your custom code"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"refreshToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"..."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"args"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Parameters"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtIssueServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'refreshToken'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]>"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// your custom code"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"6-implementing-a-custom-user-validation-service",children:"6. Implementing a custom user validation service"}),"\n",(0,o.jsxs)(s.p,{children:["The same approach can be done for ",(0,o.jsx)(s.code,{children:"AuthLocalValidateUserService"})," you can\neither completely override the default implementation or you can take\nadvantage of the default implementation."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// my-auth-local-validate-user.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ReferenceActiveInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ReferenceIdInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/ts-core'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" AuthLocalValidateUserInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" AuthLocalValidateUserService"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"} "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-local'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyAuthLocalValidateUserService"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"extends"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalValidateUserService"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"{"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"validateUser"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" dto"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalValidateUserInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// customize as needed"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super.validateUser"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(dto);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"isActive"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" user"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"&"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceActiveInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:">"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// customize as needed"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super.isActive"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(user);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// my-auth-local-validate-user.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ReferenceActiveInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ReferenceIdInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/ts-core'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" AuthLocalValidateUserInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" AuthLocalValidateUserServiceInterface"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"} "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-local'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyAuthLocalValidateUserService"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalValidateUserServiceInterface"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"{"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"validateUser"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" dto"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthLocalValidateUserInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// your custom code"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'[userId]'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"//..."})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"isActive"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" user"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"&"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceActiveInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:">"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// customize as needed"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"true"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"7-implementing-a-custom-password-validation-service",children:"7. Implementing a custom password validation service"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"PasswordValidationService"})," in the ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-password"})," module\nprovides a default implementation using bcrypt for hashing and verifying passwords.\nHowever, depending on your application's requirements, you might need to use a\ndifferent method for password hashing or add additional validation logic."]}),"\n",(0,o.jsxs)(s.p,{children:["You can either extend the existing ",(0,o.jsx)(s.code,{children:"PasswordValidationService"})," to leverage its\nbuilt-in functionalities while adding your enhancements, or completely\noverride it with your custom implementation."]}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.strong,{children:"Overriding the Default Implementation:"})}),"\n",(0,o.jsx)(s.p,{children:"If your application requires a different hashing algorithm , you can replace\nthe default implementation with one that suits your needs."}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// my-password-validation.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" PasswordStorageInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" PasswordValidationServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"} "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-password'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyPasswordValidationService"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PasswordValidationServiceInterface"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"{"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"validate"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(options"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" password"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordHash"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordSalt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// customize as needed"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"true"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"validateObject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"T"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"extends"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PasswordStorageInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:">("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" password"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" object"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"T"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// customize as needed"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"true"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.strong,{children:"Extending the Default Service:"})}),"\n",(0,o.jsx)(s.p,{children:"If you want to add additional validation logic while keeping the current\nhashing and validation, you can extend the default service:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// my-password-validation.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" PasswordStorageInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" PasswordValidationService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"} "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-password'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyPasswordValidationService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"extends"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PasswordValidationService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"validate"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(options"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" password"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordHash"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordSalt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// customize as neeeded"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super.validate"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(options);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"validateObject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"T"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"extends"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PasswordStorageInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:">("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" password"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" object"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"T"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"boolean"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// customize as neeeded"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super.validateObject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(password"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" object);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"8-overriding-the-settings",children:"8. Overriding the Settings"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Type } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"CustomLoginDto"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" email"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" password"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"localSettings"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" loginDto"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" CustomLoginDto"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" usernameField"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'email'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordField"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'password'"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"};"})})]})})}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"ts","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthLocalModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRoot"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" issueTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyIssueTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- optional"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" passwordValidationService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PasswordValidationService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- optional"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" settings"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" localSettings"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]})]})})}),"\n",(0,o.jsx)(s.h3,{id:"9-integration-with-other-nestjs-modules",children:"9. Integration with Other NestJS Modules"}),"\n",(0,o.jsxs)(s.p,{children:["Integrate ",(0,o.jsx)(s.code,{children:"nestjs-auth-local"})," with other NestJS modules like,\n",(0,o.jsx)(s.code,{children:"@concepta/nestjs-authentication"}),", ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-jwt"}),",\n",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-refresh"})," for a comprehensive authentication system."]}),"\n",(0,o.jsx)(s.h2,{id:"reference",children:"Reference"}),"\n",(0,o.jsxs)(s.p,{children:["For detailed information on the properties, methods, and classes used in the\n",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-local"}),", please refer to the API documentation\navailable at ",(0,o.jsx)(s.a,{href:"",children:"AuthLocalModule API Documentation"}),". This documentation provides\ncomprehensive details on the interfaces and services that you can utilize to\ncustomize and extend the authentication functionality within your NestJS\napplication."]}),"\n",(0,o.jsx)(s.h2,{id:"explanation",children:"Explanation"}),"\n",(0,o.jsx)(s.h3,{id:"conceptual-overview-of-local-authentication",children:"Conceptual Overview of Local Authentication"}),"\n",(0,o.jsx)(s.h4,{id:"what-is-local-authentication",children:"What is Local Authentication?"}),"\n",(0,o.jsx)(s.p,{children:"Local Authentication is a method of verifying user identity based on credentials\n(username and password) stored locally within the application or in a connected\ndatabase."}),"\n",(0,o.jsx)(s.h4,{id:"benefits-of-using-local-authentication",children:"Benefits of Using Local Authentication"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Simplicity"}),": Easy to implement and manage."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Control"}),": Full control over user authentication and data."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Security"}),": When properly implemented, provides a secure way to authenticate\nusers."]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"design-choices-in-authlocalmodule",children:"Design Choices in AuthLocalModule"}),"\n",(0,o.jsx)(s.h4,{id:"why-use-local-authentication",children:"Why Use Local Authentication?"}),"\n",(0,o.jsx)(s.p,{children:"Local Authentication is ideal for applications that need to manage user\nauthentication directly within the application without relying on external\nidentity providers."}),"\n",(0,o.jsx)(s.h4,{id:"synchronous-vs-asynchronous-registration",children:"Synchronous vs Asynchronous Registration"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Synchronous Registration"}),": Used when configuration options are static and\navailable at startup."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Asynchronous Registration"}),": Used when configuration options need to be\nretrieved from external sources at runtime."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h4,{id:"global-vs-feature-specific-registration",children:"Global vs Feature-Specific Registration"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Global Registration"}),": Makes the module available throughout the entire\napplication."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Feature-Specific Registration"}),": Allows the module to be registered only\nfor specific features or modules within the application."]}),"\n"]}),"\n"]})]})},n=Object.assign({},(0,t.ah)(),e.components),l=n.wrapper;return l?(0,o.jsx)(l,c({},e,{children:(0,o.jsx)(s,{})})):s()}function j(e){return(0,o.jsx)(x,c({},e,{children:d}))}j.getLayout=x.withLayout}},function(e){e.O(0,[4936,9774,2888,179],(function(){return s=9865,e(e.s=s);var s}));var s=e.O();_N_E=s}]); \ No newline at end of file diff --git a/_next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-f28088acf9c75f11.js b/_next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-f28088acf9c75f11.js deleted file mode 100644 index 8b4cd971e..000000000 --- a/_next/static/chunks/pages/documentation/api/authentication/nestjs-auth-local-f28088acf9c75f11.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1407],{9865:function(t,e,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/api/authentication/nestjs-auth-local",function(){return n(5281)}])},3962:function(t,e,n){"use strict";n.d(e,{Z:function(){return s}});var o=n(5893),a=(n(6428),n(2076));var i=function(){return(0,o.jsx)(a.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},s={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,o.jsx)(i,{}),titleSuffix:" \u2013 Rockets",logo:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,o.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,o.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,o.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,o.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,o.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,o.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,o.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,o.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,o.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,o.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,o.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,o.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)("span",{children:["2022 \xa9 ",(0,o.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},5281:function(t,e,n){"use strict";n.r(e),n.d(e,{default:function(){return h}});var o=n(5893),a=n(7270),i=n(3805),s=n(3962),c=n(1151);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=function(){var e=Object.assign({h1:"h1",p:"p",h2:"h2",code:"code"},(0,c.ah)(),t.components);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.h1,{children:"Rockets NestJS Local Authentication"}),"\n",(0,o.jsx)(e.p,{children:"Authenticate requests using username/email and password against a local or remote data source."}),"\n",(0,o.jsx)(e.h2,{id:"project",children:"Project"}),"\n",(0,o.jsx)(e.h2,{id:"installation",children:"Installation"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.code,{children:"yarn add @concepta/nestjs-auth-local"})})]})},n=Object.assign({},(0,c.ah)(),t.components),a=n.wrapper;return a?(0,o.jsx)(a,l({},t,{children:(0,o.jsx)(e,{})})):e()}function h(t){return(0,o.jsx)(p,l({},t,{children:u}))}h.getLayout=p.withLayout}},function(t){t.O(0,[4936,9774,2888,179],(function(){return e=9865,t(t.s=e);var e}));var e=t.O();_N_E=e}]); \ No newline at end of file diff --git a/_next/static/g7esqge5Rb2gOEYyhm1q7/_buildManifest.js b/_next/static/zlMRIyGhguIjxLJ5yF033/_buildManifest.js similarity index 96% rename from _next/static/g7esqge5Rb2gOEYyhm1q7/_buildManifest.js rename to _next/static/zlMRIyGhguIjxLJ5yF033/_buildManifest.js index 00b59348b..4a197eb82 100644 --- a/_next/static/g7esqge5Rb2gOEYyhm1q7/_buildManifest.js +++ b/_next/static/zlMRIyGhguIjxLJ5yF033/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(t,a,n){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static/chunks/622007c3-89f8f4242088221c.js",t,"static/chunks/9717-d22e8787e3f1ff41.js",a,"static/chunks/pages/index-e211aa1ac7f4f7b0.js"],"/_error":["static/chunks/pages/_error-08bfa774c299c0ab.js"],"/documentation/api/_toc_list":[t,n,a,"static/chunks/pages/documentation/api/_toc_list-7c7c136277b58b1c.js"],"/documentation/api/authentication/_toc_list":[t,a,"static/chunks/pages/documentation/api/authentication/_toc_list-a4ebe265511c52ad.js"],"/documentation/api/authentication/nestjs-auth-github":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-github-5be0f637fb6f925a.js"],"/documentation/api/authentication/nestjs-auth-local":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-local-f28088acf9c75f11.js"],"/documentation/api/authentication/nestjs-auth-refresh":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-refresh-d6f5de933db6eede.js"],"/documentation/api/authentication/nestjs-authentication":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-authentication-3faab9b21f2385a1.js"],"/documentation/api/authorization/_toc_list":[t,a,"static/chunks/pages/documentation/api/authorization/_toc_list-d85ebf620e8f7196.js"],"/documentation/api/authorization/nestjs-access-control":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-access-control-a9cbdd4d097ed97f.js"],"/documentation/api/authorization/nestjs-auth-jwt":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-75ce68b46d83bc99.js"],"/documentation/api/controller/_toc_list":[t,a,"static/chunks/pages/documentation/api/controller/_toc_list-4f3938232c4c6e46.js"],"/documentation/api/controller/nestjs-crud":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-crud-12c9cdc543236086.js"],"/documentation/api/controller/nestjs-swagger-ui":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-swagger-ui-1a5784e9ad65d761.js"],"/documentation/api/core/_toc_list":[t,a,"static/chunks/pages/documentation/api/core/_toc_list-accbc72f043d255d.js"],"/documentation/api/core/nestjs-common":[t,a,"static/chunks/pages/documentation/api/core/nestjs-common-4cb9cb7bae185468.js"],"/documentation/api/core/nestjs-core":[t,a,"static/chunks/pages/documentation/api/core/nestjs-core-3c040e1dcdec3d3e.js"],"/documentation/api/core/nestjs-event":[t,a,"static/chunks/pages/documentation/api/core/nestjs-event-88f6d62ebc6ff9ba.js"],"/documentation/api/core/nestjs-exception":[t,a,"static/chunks/pages/documentation/api/core/nestjs-exception-430b7dba13d0fdd1.js"],"/documentation/api/core/nestjs-typeorm-ext":[t,a,"static/chunks/pages/documentation/api/core/nestjs-typeorm-ext-71141fefc1ca0e38.js"],"/documentation/api/model/_toc_list":[t,a,"static/chunks/pages/documentation/api/model/_toc_list-0a0c23d255210c8e.js"],"/documentation/api/model/nestjs-user":[t,a,"static/chunks/pages/documentation/api/model/nestjs-user-8462e4a1d4e0b7d5.js"],"/documentation/api/notification/_toc_list":[t,a,"static/chunks/pages/documentation/api/notification/_toc_list-06432e852e47423b.js"],"/documentation/api/notification/nestjs-email":[t,a,"static/chunks/pages/documentation/api/notification/nestjs-email-48047d340ab8b809.js"],"/documentation/api/util/_toc_list":[t,a,"static/chunks/pages/documentation/api/util/_toc_list-90e0671d22edfbf6.js"],"/documentation/api/util/nestjs-jwt":[t,a,"static/chunks/pages/documentation/api/util/nestjs-jwt-1ad4a690358b3ec4.js"],"/documentation/api/util/nestjs-logger":[t,a,"static/chunks/pages/documentation/api/util/nestjs-logger-3c1fa9b87ee56d07.js"],"/documentation/api/util/nestjs-password":[t,a,"static/chunks/pages/documentation/api/util/nestjs-password-2533a3a0abc27d18.js"],"/documentation/getting-started":[t,n,a,"static/chunks/pages/documentation/getting-started-82126a420b9b8b0a.js"],sortedPages:["/","/_app","/_error","/documentation/api/_toc_list","/documentation/api/authentication/_toc_list","/documentation/api/authentication/nestjs-auth-github","/documentation/api/authentication/nestjs-auth-local","/documentation/api/authentication/nestjs-auth-refresh","/documentation/api/authentication/nestjs-authentication","/documentation/api/authorization/_toc_list","/documentation/api/authorization/nestjs-access-control","/documentation/api/authorization/nestjs-auth-jwt","/documentation/api/controller/_toc_list","/documentation/api/controller/nestjs-crud","/documentation/api/controller/nestjs-swagger-ui","/documentation/api/core/_toc_list","/documentation/api/core/nestjs-common","/documentation/api/core/nestjs-core","/documentation/api/core/nestjs-event","/documentation/api/core/nestjs-exception","/documentation/api/core/nestjs-typeorm-ext","/documentation/api/model/_toc_list","/documentation/api/model/nestjs-user","/documentation/api/notification/_toc_list","/documentation/api/notification/nestjs-email","/documentation/api/util/_toc_list","/documentation/api/util/nestjs-jwt","/documentation/api/util/nestjs-logger","/documentation/api/util/nestjs-password","/documentation/getting-started"]}}("static/chunks/4936-449195fb22f496c1.js","static/css/cbe0d6ee4dd5617e.css","static/chunks/4294-2f4fb656a61708e6.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(t,a,n){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static/chunks/622007c3-89f8f4242088221c.js",t,"static/chunks/9717-d22e8787e3f1ff41.js",a,"static/chunks/pages/index-e211aa1ac7f4f7b0.js"],"/_error":["static/chunks/pages/_error-08bfa774c299c0ab.js"],"/documentation/api/_toc_list":[t,n,a,"static/chunks/pages/documentation/api/_toc_list-7c7c136277b58b1c.js"],"/documentation/api/authentication/_toc_list":[t,a,"static/chunks/pages/documentation/api/authentication/_toc_list-153f9cf9fc110014.js"],"/documentation/api/authentication/nestjs-auth-github":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-github-5be0f637fb6f925a.js"],"/documentation/api/authentication/nestjs-auth-local":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-local-7b24a2bcadc7063b.js"],"/documentation/api/authentication/nestjs-auth-refresh":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-refresh-d6f5de933db6eede.js"],"/documentation/api/authentication/nestjs-authentication":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-authentication-3faab9b21f2385a1.js"],"/documentation/api/authorization/_toc_list":[t,a,"static/chunks/pages/documentation/api/authorization/_toc_list-d85ebf620e8f7196.js"],"/documentation/api/authorization/nestjs-access-control":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-access-control-a9cbdd4d097ed97f.js"],"/documentation/api/authorization/nestjs-auth-jwt":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-75ce68b46d83bc99.js"],"/documentation/api/controller/_toc_list":[t,a,"static/chunks/pages/documentation/api/controller/_toc_list-4f3938232c4c6e46.js"],"/documentation/api/controller/nestjs-crud":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-crud-12c9cdc543236086.js"],"/documentation/api/controller/nestjs-swagger-ui":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-swagger-ui-1a5784e9ad65d761.js"],"/documentation/api/core/_toc_list":[t,a,"static/chunks/pages/documentation/api/core/_toc_list-accbc72f043d255d.js"],"/documentation/api/core/nestjs-common":[t,a,"static/chunks/pages/documentation/api/core/nestjs-common-4cb9cb7bae185468.js"],"/documentation/api/core/nestjs-core":[t,a,"static/chunks/pages/documentation/api/core/nestjs-core-3c040e1dcdec3d3e.js"],"/documentation/api/core/nestjs-event":[t,a,"static/chunks/pages/documentation/api/core/nestjs-event-88f6d62ebc6ff9ba.js"],"/documentation/api/core/nestjs-exception":[t,a,"static/chunks/pages/documentation/api/core/nestjs-exception-430b7dba13d0fdd1.js"],"/documentation/api/core/nestjs-typeorm-ext":[t,a,"static/chunks/pages/documentation/api/core/nestjs-typeorm-ext-71141fefc1ca0e38.js"],"/documentation/api/model/_toc_list":[t,a,"static/chunks/pages/documentation/api/model/_toc_list-0a0c23d255210c8e.js"],"/documentation/api/model/nestjs-user":[t,a,"static/chunks/pages/documentation/api/model/nestjs-user-8462e4a1d4e0b7d5.js"],"/documentation/api/notification/_toc_list":[t,a,"static/chunks/pages/documentation/api/notification/_toc_list-06432e852e47423b.js"],"/documentation/api/notification/nestjs-email":[t,a,"static/chunks/pages/documentation/api/notification/nestjs-email-48047d340ab8b809.js"],"/documentation/api/util/_toc_list":[t,a,"static/chunks/pages/documentation/api/util/_toc_list-90e0671d22edfbf6.js"],"/documentation/api/util/nestjs-jwt":[t,a,"static/chunks/pages/documentation/api/util/nestjs-jwt-1ad4a690358b3ec4.js"],"/documentation/api/util/nestjs-logger":[t,a,"static/chunks/pages/documentation/api/util/nestjs-logger-3c1fa9b87ee56d07.js"],"/documentation/api/util/nestjs-password":[t,a,"static/chunks/pages/documentation/api/util/nestjs-password-2533a3a0abc27d18.js"],"/documentation/getting-started":[t,n,a,"static/chunks/pages/documentation/getting-started-82126a420b9b8b0a.js"],sortedPages:["/","/_app","/_error","/documentation/api/_toc_list","/documentation/api/authentication/_toc_list","/documentation/api/authentication/nestjs-auth-github","/documentation/api/authentication/nestjs-auth-local","/documentation/api/authentication/nestjs-auth-refresh","/documentation/api/authentication/nestjs-authentication","/documentation/api/authorization/_toc_list","/documentation/api/authorization/nestjs-access-control","/documentation/api/authorization/nestjs-auth-jwt","/documentation/api/controller/_toc_list","/documentation/api/controller/nestjs-crud","/documentation/api/controller/nestjs-swagger-ui","/documentation/api/core/_toc_list","/documentation/api/core/nestjs-common","/documentation/api/core/nestjs-core","/documentation/api/core/nestjs-event","/documentation/api/core/nestjs-exception","/documentation/api/core/nestjs-typeorm-ext","/documentation/api/model/_toc_list","/documentation/api/model/nestjs-user","/documentation/api/notification/_toc_list","/documentation/api/notification/nestjs-email","/documentation/api/util/_toc_list","/documentation/api/util/nestjs-jwt","/documentation/api/util/nestjs-logger","/documentation/api/util/nestjs-password","/documentation/getting-started"]}}("static/chunks/4936-449195fb22f496c1.js","static/css/cbe0d6ee4dd5617e.css","static/chunks/4294-e1e48831c31a8f07.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/_next/static/g7esqge5Rb2gOEYyhm1q7/_middlewareManifest.js b/_next/static/zlMRIyGhguIjxLJ5yF033/_middlewareManifest.js similarity index 100% rename from _next/static/g7esqge5Rb2gOEYyhm1q7/_middlewareManifest.js rename to _next/static/zlMRIyGhguIjxLJ5yF033/_middlewareManifest.js diff --git a/_next/static/g7esqge5Rb2gOEYyhm1q7/_ssgManifest.js b/_next/static/zlMRIyGhguIjxLJ5yF033/_ssgManifest.js similarity index 100% rename from _next/static/g7esqge5Rb2gOEYyhm1q7/_ssgManifest.js rename to _next/static/zlMRIyGhguIjxLJ5yF033/_ssgManifest.js diff --git a/documentation/api/_toc_list.html b/documentation/api/_toc_list.html index ba5200ef8..0dbad247c 100644 --- a/documentation/api/_toc_list.html +++ b/documentation/api/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/authentication/_toc_list.html b/documentation/api/authentication/_toc_list.html index ac9eb5aa8..7223e1dbe 100644 --- a/documentation/api/authentication/_toc_list.html +++ b/documentation/api/authentication/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/authentication/nestjs-auth-github.html b/documentation/api/authentication/nestjs-auth-github.html index cc2ce3372..f4404204f 100644 --- a/documentation/api/authentication/nestjs-auth-github.html +++ b/documentation/api/authentication/nestjs-auth-github.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/authentication/nestjs-auth-local.html b/documentation/api/authentication/nestjs-auth-local.html index 2f726873f..9f1b237ed 100644 --- a/documentation/api/authentication/nestjs-auth-local.html +++ b/documentation/api/authentication/nestjs-auth-local.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
Documentation
/
API
/
Authentication
/
Local Login
\ No newline at end of file diff --git a/documentation/api/authentication/nestjs-auth-refresh.html b/documentation/api/authentication/nestjs-auth-refresh.html index bf81eedea..589278c48 100644 --- a/documentation/api/authentication/nestjs-auth-refresh.html +++ b/documentation/api/authentication/nestjs-auth-refresh.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/authentication/nestjs-authentication.html b/documentation/api/authentication/nestjs-authentication.html index 13f1915e4..3df9478fb 100644 --- a/documentation/api/authentication/nestjs-authentication.html +++ b/documentation/api/authentication/nestjs-authentication.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/authorization/_toc_list.html b/documentation/api/authorization/_toc_list.html index 2da4bdb80..0f85437c3 100644 --- a/documentation/api/authorization/_toc_list.html +++ b/documentation/api/authorization/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/authorization/nestjs-access-control.html b/documentation/api/authorization/nestjs-access-control.html index c1c0b21e3..811b5ed76 100644 --- a/documentation/api/authorization/nestjs-access-control.html +++ b/documentation/api/authorization/nestjs-access-control.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); - \ No newline at end of file + \ No newline at end of file diff --git a/documentation/api/authorization/nestjs-auth-jwt.html b/documentation/api/authorization/nestjs-auth-jwt.html index deab65c28..00dee6dd3 100644 --- a/documentation/api/authorization/nestjs-auth-jwt.html +++ b/documentation/api/authorization/nestjs-auth-jwt.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
Documentation
/
API
/
Authorization
/
Access Token
\ No newline at end of file +
Documentation
/
API
/
Authorization
/
Access Token
\ No newline at end of file diff --git a/documentation/api/controller/_toc_list.html b/documentation/api/controller/_toc_list.html index 6baa18518..7179ea036 100644 --- a/documentation/api/controller/_toc_list.html +++ b/documentation/api/controller/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/controller/nestjs-crud.html b/documentation/api/controller/nestjs-crud.html index 1ad48d1ef..b84b02ca7 100644 --- a/documentation/api/controller/nestjs-crud.html +++ b/documentation/api/controller/nestjs-crud.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/controller/nestjs-swagger-ui.html b/documentation/api/controller/nestjs-swagger-ui.html index 572433628..2650d1d11 100644 --- a/documentation/api/controller/nestjs-swagger-ui.html +++ b/documentation/api/controller/nestjs-swagger-ui.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/core/_toc_list.html b/documentation/api/core/_toc_list.html index 07d48ce60..e702ebee6 100644 --- a/documentation/api/core/_toc_list.html +++ b/documentation/api/core/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/core/nestjs-common.html b/documentation/api/core/nestjs-common.html index dd3897b07..bb4f00a68 100644 --- a/documentation/api/core/nestjs-common.html +++ b/documentation/api/core/nestjs-common.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/core/nestjs-core.html b/documentation/api/core/nestjs-core.html index 0ce85c259..d9466d970 100644 --- a/documentation/api/core/nestjs-core.html +++ b/documentation/api/core/nestjs-core.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/core/nestjs-event.html b/documentation/api/core/nestjs-event.html index 14a522974..9d42ab404 100644 --- a/documentation/api/core/nestjs-event.html +++ b/documentation/api/core/nestjs-event.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/core/nestjs-exception.html b/documentation/api/core/nestjs-exception.html index a03321d81..2061f8507 100644 --- a/documentation/api/core/nestjs-exception.html +++ b/documentation/api/core/nestjs-exception.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/core/nestjs-typeorm-ext.html b/documentation/api/core/nestjs-typeorm-ext.html index a273fdac0..6c25c615a 100644 --- a/documentation/api/core/nestjs-typeorm-ext.html +++ b/documentation/api/core/nestjs-typeorm-ext.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/model/_toc_list.html b/documentation/api/model/_toc_list.html index f107a7023..5b13c2908 100644 --- a/documentation/api/model/_toc_list.html +++ b/documentation/api/model/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/model/nestjs-user.html b/documentation/api/model/nestjs-user.html index db30f4ac4..f2ca4555e 100644 --- a/documentation/api/model/nestjs-user.html +++ b/documentation/api/model/nestjs-user.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/notification/_toc_list.html b/documentation/api/notification/_toc_list.html index f66fc385c..bccf715bc 100644 --- a/documentation/api/notification/_toc_list.html +++ b/documentation/api/notification/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/notification/nestjs-email.html b/documentation/api/notification/nestjs-email.html index 3f2777b07..71cb5be5f 100644 --- a/documentation/api/notification/nestjs-email.html +++ b/documentation/api/notification/nestjs-email.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/util/_toc_list.html b/documentation/api/util/_toc_list.html index 4448abda0..d3ee0ce24 100644 --- a/documentation/api/util/_toc_list.html +++ b/documentation/api/util/_toc_list.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/util/nestjs-jwt.html b/documentation/api/util/nestjs-jwt.html index 154944ad2..da59c62cc 100644 --- a/documentation/api/util/nestjs-jwt.html +++ b/documentation/api/util/nestjs-jwt.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/api/util/nestjs-logger.html b/documentation/api/util/nestjs-logger.html index 4c65dbe97..b24cf9253 100644 --- a/documentation/api/util/nestjs-logger.html +++ b/documentation/api/util/nestjs-logger.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); - \ No newline at end of file + \ No newline at end of file diff --git a/documentation/api/util/nestjs-password.html b/documentation/api/util/nestjs-password.html index da8f730ef..716f410af 100644 --- a/documentation/api/util/nestjs-password.html +++ b/documentation/api/util/nestjs-password.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/documentation/getting-started.html b/documentation/getting-started.html index 92d2757e5..eb4be9d79 100644 --- a/documentation/getting-started.html +++ b/documentation/getting-started.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file diff --git a/index.html b/index.html index 68da02d8f..9a15e3c8c 100644 --- a/index.html +++ b/index.html @@ -5,4 +5,4 @@ gtag('config', 'G-E2EF28D6TS', { page_path: window.location.pathname, }); -
\ No newline at end of file +
\ No newline at end of file