Skip to content

fix: user validation error inside the forgotPassword operation in the cases where user had localised fields #12034

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 28, 2025

Conversation

AdrianMaj
Copy link
Contributor

@AdrianMaj AdrianMaj commented Apr 8, 2025

What?

So, while resetting the password using the Local API, I encountered a validation error for localized fields. I jumped into the Payload repository, and saw that payload.update is being used in the process, with no locale specified/supported. This causes errors if the user has localized fields, but specifying a locale for the password reset operation would be silly, so I suggest turning this into a db operation, just like the user fetching operation before.

How?

I replaced this:

    user = await payload.update({
      id: user.id,
      collection: collectionConfig.slug,
      data: user,
      req,
    })

With this:

    user = await payload.db.updateOne({
     id: user.id,
     collection: collectionConfig.slug,
     data: user,
     req,
   })

So the validation of other fields would be skipped in this operation.

Why?

This is the error I encountered while trying to reset password, it blocks my project to go further :)

Error [ValidationError]: The following field is invalid: Data > Name
    at async sendOfferEmail (src/collections/Offers/components/SendEmailButton/index.tsx:18:20)
  16 |     try {
  17 |       const payload = await getPayload({ config });
> 18 |       const token = await payload.forgotPassword({
     |                    ^
  19 |         collection: "offers",
  20 |         data: {
{
  data: [Object],
  isOperational: true,
  isPublic: false,
  status: 400,
  [cause]: [Object]
}
cause:
{
  id: '67f4c1df8aa60189df9bdf5c',
  collection: 'offers',
  errors: [
    {
      label: 'Data > Name',
      message: 'This field is required.',
      path: 'name'
    }
  ],
  global: undefined
}

P.S The name field is totally fine, it is required and filled with values in both locales I use, in admin panel I can edit and save everything without any issues.

@paulpopus paulpopus enabled auto-merge (squash) April 28, 2025 18:34
@paulpopus paulpopus disabled auto-merge April 28, 2025 18:34
@paulpopus paulpopus changed the title fix: replaced payload.update with payload.db.updateOne to skip data validation while resetting password fix: user validation error inside the forgotPassword operation in the cases where user had localised fields Apr 28, 2025
@paulpopus paulpopus enabled auto-merge (squash) April 28, 2025 18:35
@paulpopus paulpopus merged commit c85fb80 into payloadcms:main Apr 28, 2025
78 checks passed
Copy link
Contributor

🚀 This is included in version v3.36.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants