You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/guides/configure/session-tasks.mdx
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,6 +17,7 @@ The following table lists the available tasks and their corresponding keys.
17
17
| Setting | Key | Description |
18
18
| - | - | - |
19
19
|[Allow Personal Accounts](https://dashboard.clerk.com/~/organizations-settings)|`choose-organization`| Disabled by default when enabling Organizations. When disabled, users are required to choose an Organization after authenticating. When enabled, users can choose a [Personal Account](!personal-account) instead of an Organization. |
20
+
|[Force password reset](/docs/guides/secure/password-protection-and-rules#manually-set-a-password-as-compromised)|`reset-password`|[Enabled by default for instances created after December 8, 2025](!update). When enabled, the user is required to reset their password on their next sign-in if their password is marked as compromised. If your instance is older than December 8, 2025, you will need to update your instance to the **Reset password session task** update. |
20
21
21
22
## Session states
22
23
@@ -37,6 +38,7 @@ The following table lists the available tasks and their corresponding components
> [Personal Accounts](!personal-account) being disabled by default was released on 08-22-2025. Applications created before this date will not be able to see the **Allow Personal Accounts** setting, because Personal Accounts were enabled by default.
Copy file name to clipboardExpand all lines: docs/guides/development/custom-flows/error-handling.mdx
+271Lines changed: 271 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -271,3 +271,274 @@ For instance, if you wish to inform a user at which absolute time they will be a
271
271
```
272
272
</Tab>
273
273
</Tabs>
274
+
275
+
### Password compromised
276
+
277
+
If you have marked a user's password as compromised and the user has another way to identify themselves, such as an email address (so they can use email [OTP](!otp) or email link), or a phone number (so they can use an SMS [OTP](!otp)), you will receive an HTTP status of `422 (Unprocessable Entity)` and the following error payload:
278
+
279
+
```json
280
+
{
281
+
"errors": [
282
+
{
283
+
"long_message":"Your password may be compromised. To protect your account, please continue with an alternative sign-in method. You will be required to reset your password after signing in.",
284
+
"code":"form_password_compromised",
285
+
"meta": {
286
+
"name":"param"
287
+
}
288
+
}
289
+
]
290
+
}
291
+
```
292
+
293
+
When a user password is marked as compromised, they will not be able to sign in with their compromised password, so you should prompt them to sign-in with another method. If they do not have any other identification methods to sign-in, e.g if they only have username and password, they will be signed in but they will be required to reset their password.
294
+
295
+
> [!WARNING]
296
+
> If your instance is older than December 18, 2025, you will need to [update your instance](!update) to the **Reset password session task** update.
297
+
298
+
<Tabs items={["Next.js"]}>
299
+
<Tab>
300
+
This example is written for Next.js App Router but it can be adapted for any React-based framework.
Copy file name to clipboardExpand all lines: docs/guides/secure/password-protection-and-rules.mdx
+15Lines changed: 15 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,3 +49,18 @@ For users that set an average/weak password that complies with your organization
49
49
50
50
> [!NOTE]
51
51
> OWASP recommends providing feedback to users on the strength of their password and offering suggestions for improvement. This can help users create stronger passwords and improve the overall security of the application.
52
+
53
+
## Manually set a password as compromised
54
+
55
+
Clerk provides a way to manually set a password as compromised. This is useful for blocking passwords in the case that:
56
+
57
+
- The password has recently been added to the compromised password database.
58
+
- The user was able to set a compromised password because protection was off at the time.
59
+
60
+
To manually set a user's password as compromised:
61
+
62
+
1. In the Clerk Dashboard, navigate to [**Users**](https://dashboard.clerk.com/~/users) page and select the user you want to mark as compromised. You'll be redirected to the user's settings.
63
+
1. In the **Password** section, if a password is set, select the three dots icon and select **Set password compromised**. A modal will appear asking you to confirm the action. Complete the instructions.
64
+
65
+
> [!IMPORTANT]
66
+
> Setting a user's password as compromised will prevent the user from signing in until they reset their password. If you are implementing [custom authentication flows](!custom-flow), you will need to handle the compromised password flow by yourself. See [Error handling](/docs/guides/development/custom-flows/error-handling#password-compromised) for more information.
0 commit comments