[PR #7941] feat(user): add soft delete support to deleteUser #15887

Open
opened 2026-04-13 10:17:22 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/better-auth/better-auth/pull/7941
Author: @quochuydev
Created: 2/12/2026
Status: 🔄 Open

Base: nextHead: feat/soft-delete-user


📝 Commits (1)

  • 3eaf3c5 feat(user): add soft delete support to deleteUser

📊 Changes

8 files changed (+298 additions, -7 deletions)

View changed files

📝 packages/better-auth/src/api/routes/update-user.test.ts (+206 -0)
📝 packages/better-auth/src/api/routes/update-user.ts (+36 -3)
📝 packages/better-auth/src/db/internal-adapter.ts (+27 -3)
📝 packages/better-auth/src/plugins/admin/routes.ts (+1 -0)
📝 packages/better-auth/src/plugins/open-api/__snapshots__/open-api.test.ts.snap (+4 -0)
📝 packages/core/src/db/get-tables.ts (+11 -0)
📝 packages/core/src/types/context.ts (+4 -1)
📝 packages/core/src/types/init-options.ts (+9 -0)

📄 Description

Add a softDelete option that sets a deletedAt timestamp instead of permanently removing the user. Soft-deleted users are filtered from authentication lookups but can be hard-deleted by admins.


Summary by cubic

Adds soft delete to user deletion so you can set deletedAt instead of hard-removing users. Soft-deleted users can’t sign in, sessions are revoked, and admins can still hard-delete them. By default, deletes remain hard unless softDelete is requested and enabled; the email callback uses soft delete automatically when enabled.

  • New Features

    • API: deleteUser accepts softDelete; email callback respects config; OpenAPI updated.
    • DB: sets deletedAt on soft delete; sessions are revoked; linked accounts are kept on soft delete.
    • Auth: soft-deleted users are excluded from email/account/id lookups; findUserById supports { includeSoftDeleted }; admin removeUser can hard-delete soft-deleted users.
    • Tests: added coverage for soft delete flows and default hard-delete behavior.
  • Migration

    • If enabling user.deleteUser.softDelete, add a deletedAt column to the user table.
    • If you implement a custom InternalAdapter, update findUserById(userId, { includeSoftDeleted? }) and default to filtering out soft-deleted users.

Written for commit 3eaf3c540c. Summary will update on new commits.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/better-auth/better-auth/pull/7941 **Author:** [@quochuydev](https://github.com/quochuydev) **Created:** 2/12/2026 **Status:** 🔄 Open **Base:** `next` ← **Head:** `feat/soft-delete-user` --- ### 📝 Commits (1) - [`3eaf3c5`](https://github.com/better-auth/better-auth/commit/3eaf3c540c0bbdb9196cba22af821b91ed2f29ee) feat(user): add soft delete support to deleteUser ### 📊 Changes **8 files changed** (+298 additions, -7 deletions) <details> <summary>View changed files</summary> 📝 `packages/better-auth/src/api/routes/update-user.test.ts` (+206 -0) 📝 `packages/better-auth/src/api/routes/update-user.ts` (+36 -3) 📝 `packages/better-auth/src/db/internal-adapter.ts` (+27 -3) 📝 `packages/better-auth/src/plugins/admin/routes.ts` (+1 -0) 📝 `packages/better-auth/src/plugins/open-api/__snapshots__/open-api.test.ts.snap` (+4 -0) 📝 `packages/core/src/db/get-tables.ts` (+11 -0) 📝 `packages/core/src/types/context.ts` (+4 -1) 📝 `packages/core/src/types/init-options.ts` (+9 -0) </details> ### 📄 Description Add a `softDelete` option that sets a `deletedAt` timestamp instead of permanently removing the user. Soft-deleted users are filtered from authentication lookups but can be hard-deleted by admins. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds soft delete to user deletion so you can set deletedAt instead of hard-removing users. Soft-deleted users can’t sign in, sessions are revoked, and admins can still hard-delete them. By default, deletes remain hard unless softDelete is requested and enabled; the email callback uses soft delete automatically when enabled. - **New Features** - API: deleteUser accepts softDelete; email callback respects config; OpenAPI updated. - DB: sets deletedAt on soft delete; sessions are revoked; linked accounts are kept on soft delete. - Auth: soft-deleted users are excluded from email/account/id lookups; findUserById supports { includeSoftDeleted }; admin removeUser can hard-delete soft-deleted users. - Tests: added coverage for soft delete flows and default hard-delete behavior. - **Migration** - If enabling user.deleteUser.softDelete, add a deletedAt column to the user table. - If you implement a custom InternalAdapter, update findUserById(userId, { includeSoftDeleted? }) and default to filtering out soft-deleted users. <sup>Written for commit 3eaf3c540c0bbdb9196cba22af821b91ed2f29ee. Summary will update on new commits.</sup> <!-- End of auto-generated description by cubic. --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-13 10:17:22 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/better-auth#15887