Feat(authentication): Load auth providers (#6023)
* initial providers loader implementation * registerAdd providers * remove comment * remove comment
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
export * from "./connection"
|
||||
export * from "./container"
|
||||
export * from "./providers"
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
import { LoaderOptions, ModulesSdkTypes } from "@medusajs/types"
|
||||
import { asClass } from "awilix"
|
||||
import * as defaultProviders from "@providers"
|
||||
import { AuthProviderService } from "@services"
|
||||
import { ServiceTypes } from "@types"
|
||||
|
||||
export default async ({
|
||||
container,
|
||||
options,
|
||||
}: LoaderOptions<
|
||||
| ModulesSdkTypes.ModuleServiceInitializeOptions
|
||||
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
|
||||
>): Promise<void> => {
|
||||
// if(options.providers?.length) {
|
||||
// TODO: implement plugin provider registration
|
||||
// }
|
||||
|
||||
const providersToLoad = Object.values(defaultProviders)
|
||||
|
||||
const authProviderService: AuthProviderService =
|
||||
container.cradle["authProviderService"]
|
||||
|
||||
const providers = await authProviderService.list({
|
||||
provider: providersToLoad.map((p) => p.PROVIDER),
|
||||
})
|
||||
|
||||
const loadedProviders = new Map(providers.map((p) => [p.provider, p]))
|
||||
|
||||
const providersToCreate: ServiceTypes.CreateAuthProviderDTO[] = []
|
||||
|
||||
for (const provider of providersToLoad) {
|
||||
container.registerAdd("providers", asClass(provider).singleton())
|
||||
|
||||
container.register({
|
||||
[`provider_${provider.PROVIDER}`]: asClass(provider).singleton(),
|
||||
})
|
||||
|
||||
if (loadedProviders.has(provider.PROVIDER)) {
|
||||
continue
|
||||
}
|
||||
|
||||
providersToCreate.push({
|
||||
provider: provider.PROVIDER,
|
||||
name: provider.DISPLAY_NAME,
|
||||
})
|
||||
}
|
||||
|
||||
await authProviderService.create(providersToCreate)
|
||||
}
|
||||
@@ -2,9 +2,10 @@ import { ModuleExports } from "@medusajs/types"
|
||||
import { AuthenticationModuleService } from "@services"
|
||||
import loadConnection from "./loaders/connection"
|
||||
import loadContainer from "./loaders/container"
|
||||
import loadProviders from "./loaders/providers"
|
||||
|
||||
const service = AuthenticationModuleService
|
||||
const loaders = [loadContainer, loadConnection] as any
|
||||
const loaders = [loadContainer, loadConnection, loadProviders] as any
|
||||
|
||||
export const moduleDefinition: ModuleExports = {
|
||||
service,
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export { default as UsernamePasswordProvider } from "./username-password"
|
||||
@@ -0,0 +1,21 @@
|
||||
import { AuthUserService } from "@services"
|
||||
import { AbstractAuthenticationModuleProvider } from "@medusajs/types"
|
||||
|
||||
class UsernamePasswordProvider extends AbstractAuthenticationModuleProvider {
|
||||
public static PROVIDER = "usernamePassword"
|
||||
public static DISPLAY_NAME = "Username/Password Authentication"
|
||||
|
||||
protected readonly authUserSerivce_: AuthUserService
|
||||
|
||||
constructor({ authUserService: AuthUserService }) {
|
||||
super()
|
||||
|
||||
this.authUserSerivce_ = AuthUserService
|
||||
}
|
||||
|
||||
async authenticate(userData: Record<string, unknown>) {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
export default UsernamePasswordProvider
|
||||
Reference in New Issue
Block a user