feat: Create user account (#6819)
This commit is contained in:
@@ -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),
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
@@ -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 })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user