feat: Create user account (#6819)

This commit is contained in:
Oli Juhl authored and GitHub committed 2024-03-26 10:07:38 +01:00
1 parent e005987adf
commit 7bc7adeeb4
8 files changed
+434 -331

No files matched your search

@@ -0,0 +1,31 @@
import { CreateUserDTO, UserDTO } from "@medusajs/types"
import {
WorkflowData,
createWorkflow,
transform,
} from "@medusajs/workflows-sdk"
import { setAuthAppMetadataStep } from "../../auth/steps"
import { createUsersStep } from "../steps"
type WorkflowInput = {
authUserId: string
userData: CreateUserDTO
}
export const createUserAccountWorkflowId = "create-user-account"
export const createUserAccountWorkflow = createWorkflow(
createUserAccountWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<UserDTO> => {
const users = createUsersStep([input.userData])
const user = transform(users, (users: UserDTO[]) => users[0])
setAuthAppMetadataStep({
authUserId: input.authUserId,
key: "user_id",
value: user.id,
})
return user
}
)
@@ -1,3 +1,5 @@
export * from "./delete-users"
export * from "./create-user-account"
export * from "./create-users"
export * from "./delete-users"
export * from "./update-users"
@@ -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 })
}
@@ -187,7 +187,6 @@ const getAuthUserFromJwtToken = (
return verified as AuthUserDTO
}
} catch (err) {
console.error(err)
return null
}
}