feat: Reset password (#8962)
* wip * more work * wip * more work * wrap up first iteration * work on new approach * more work * move middleware func to route * cleanup * more work * wrap up * more work * fix workflow * minor tweaks * finalize * Use JWT secret instead
This commit is contained in:
@@ -1 +1,3 @@
|
||||
export * from "./steps"
|
||||
export * from "./workflows"
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ export const setAuthAppMetadataStep = createStep(
|
||||
|
||||
appMetadata[key] = data.value
|
||||
|
||||
await service.updateAuthIdentites({
|
||||
await service.updateAuthIdentities({
|
||||
id: authIdentity.id,
|
||||
app_metadata: appMetadata,
|
||||
})
|
||||
@@ -58,7 +58,7 @@ export const setAuthAppMetadataStep = createStep(
|
||||
delete appMetadata[key]
|
||||
}
|
||||
|
||||
await service.updateAuthIdentites({
|
||||
await service.updateAuthIdentities({
|
||||
id: authIdentity.id,
|
||||
app_metadata: appMetadata,
|
||||
})
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
import {
|
||||
AuthWorkflowEvents,
|
||||
generateJwtToken,
|
||||
MedusaError,
|
||||
} from "@medusajs/utils";
|
||||
import {
|
||||
createWorkflow,
|
||||
transform,
|
||||
WorkflowResponse,
|
||||
} from "@medusajs/workflows-sdk";
|
||||
import { emitEventStep, useRemoteQueryStep } from "../../common";
|
||||
|
||||
export const generateResetPasswordTokenWorkflow = createWorkflow(
|
||||
"generate-reset-password-token",
|
||||
(input: { entityId: string; provider: string; secret: string }) => {
|
||||
const providerIdentities = useRemoteQueryStep({
|
||||
entry_point: "provider_identity",
|
||||
fields: ["auth_identity_id", "provider_metadata"],
|
||||
variables: {
|
||||
filters: {
|
||||
entity_id: input.entityId,
|
||||
provider: input.provider,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const token = transform(
|
||||
{ input, providerIdentities },
|
||||
({ input, providerIdentities }) => {
|
||||
const providerIdentity = providerIdentities?.[0]
|
||||
|
||||
if (!providerIdentity) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.INVALID_DATA,
|
||||
`Provider identity with entity_id ${input.entityId} and provider ${input.provider} not found`
|
||||
)
|
||||
}
|
||||
|
||||
const token = generateJwtToken(
|
||||
{
|
||||
entity_id: input.entityId,
|
||||
provider: input.provider,
|
||||
},
|
||||
{
|
||||
secret: input.secret,
|
||||
expiresIn: "15m",
|
||||
}
|
||||
)
|
||||
|
||||
return token
|
||||
}
|
||||
)
|
||||
|
||||
emitEventStep({
|
||||
eventName: AuthWorkflowEvents.PASSWORD_RESET,
|
||||
data: { entity_id: input.entityId, token },
|
||||
})
|
||||
|
||||
return new WorkflowResponse(token)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
export * from "./generate-reset-password-token"
|
||||
Reference in New Issue
Block a user