feat: Create user account (#6819)

This commit is contained in:
Oli Juhl
2024-03-26 10:07:38 +01:00
committed by GitHub
parent e005987adf
commit 7bc7adeeb4
8 changed files with 434 additions and 331 deletions
@@ -3,11 +3,10 @@ import {
MedusaResponse,
} from "../../../../types/routing"
import { AdminPostInvitesInviteAcceptReq } from "../validators"
import { IUserModuleService } from "@medusajs/types"
import { InviteWorkflow } from "@medusajs/types"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import { acceptInviteWorkflow } from "@medusajs/core-flows"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import { IUserModuleService, InviteWorkflow } from "@medusajs/types"
import { AdminPostInvitesInviteAcceptReq } from "../validators"
export const POST = async (
req: AuthenticatedMedusaRequest<AdminPostInvitesInviteAcceptReq>,
@@ -12,27 +12,27 @@ import { MiddlewareRoute } from "../../../types/middlewares"
import { authenticate } from "../../../utils/authenticate-middleware"
export const adminUserRoutesMiddlewares: MiddlewareRoute[] = [
{
method: ["ALL"],
matcher: "/admin/users*",
middlewares: [authenticate("admin", ["bearer", "session"])],
},
{
method: ["GET"],
matcher: "/admin/users",
middlewares: [
authenticate("admin", ["bearer", "session"]),
transformQuery(AdminGetUsersParams, QueryConfig.listTransformQueryConfig),
],
},
{
method: ["POST"],
matcher: "/admin/users",
middlewares: [transformBody(AdminCreateUserRequest)],
middlewares: [
authenticate("admin", ["bearer", "session"], { allowUnregistered: true }),
transformBody(AdminCreateUserRequest),
],
},
{
method: ["GET"],
matcher: "/admin/users/:id",
middlewares: [
authenticate("admin", ["bearer", "session"]),
transformQuery(
AdminGetUsersUserParams,
QueryConfig.retrieveTransformQueryConfig
@@ -43,6 +43,7 @@ export const adminUserRoutesMiddlewares: MiddlewareRoute[] = [
method: ["GET"],
matcher: "/admin/users/me",
middlewares: [
authenticate("admin", ["bearer", "session"]),
transformQuery(
AdminGetUsersUserParams,
QueryConfig.retrieveTransformQueryConfig
@@ -52,6 +53,9 @@ export const adminUserRoutesMiddlewares: MiddlewareRoute[] = [
{
method: ["POST"],
matcher: "/admin/users/:id",
middlewares: [transformBody(AdminUpdateUserRequest)],
middlewares: [
authenticate("admin", ["bearer", "session"]),
transformBody(AdminUpdateUserRequest),
],
},
]
+28 -12
View File
@@ -1,14 +1,16 @@
import { createUserAccountWorkflow } from "@medusajs/core-flows"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import { CreateUserDTO, IAuthModuleService } from "@medusajs/types"
import {
ContainerRegistrationKeys,
MedusaError,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import jwt from "jsonwebtoken"
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../types/routing"
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import { CreateUserDTO } from "@medusajs/types"
import { createUsersWorkflow } from "@medusajs/core-flows"
export const GET = async (
req: AuthenticatedMedusaRequest,
@@ -43,16 +45,30 @@ export const POST = async (
req: AuthenticatedMedusaRequest<CreateUserDTO>,
res: MedusaResponse
) => {
const workflow = createUsersWorkflow(req.scope)
const authModuleService = req.scope.resolve<IAuthModuleService>(
ModuleRegistrationName.AUTH
)
// If `actor_id` is present, the request carries authentication for an existing user
if (req.auth.actor_id) {
throw new MedusaError(
MedusaError.Types.INVALID_DATA,
"Request carries authentication for an existing user"
)
}
const input = {
input: {
users: [req.validatedBody],
userData: req.validatedBody,
authUserId: req.auth.auth_user_id,
},
}
const { result } = await workflow.run(input)
const { result } = await createUserAccountWorkflow(req.scope).run(input)
const [user] = result
res.status(200).json({ user })
const { jwt_secret } = req.scope.resolve("configModule").projectConfig
const authUser = await authModuleService.retrieve(req.auth.auth_user_id)
const token = jwt.sign(authUser, jwt_secret)
res.status(200).json({ user: result, token })
}