From e47dbc66b385403c308200bd8a06ee5a8dc92847 Mon Sep 17 00:00:00 2001 From: Rasheed Rahman Date: Sun, 25 Jan 2026 20:28:49 +0000 Subject: [PATCH 1/2] feat: add deleteAll method on access token provider --- .../access_tokens_guard/token_providers/db.ts | 23 ++++++++++++ .../access_tokens/token_providers/db.spec.ts | 37 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/modules/access_tokens_guard/token_providers/db.ts b/modules/access_tokens_guard/token_providers/db.ts index 993faff..e1586a0 100644 --- a/modules/access_tokens_guard/token_providers/db.ts +++ b/modules/access_tokens_guard/token_providers/db.ts @@ -320,6 +320,29 @@ export class DbAccessTokensProvider< return affectedRows as unknown as number } + /** + * Delete all tokens for a given user + * + * @param user - The user instance to delete tokens for + * + * @example + * const deletedCount = await provider.delete(user) + * console.log('Deleted tokens:', deletedCount) + */ + async deleteAll(user: InstanceType): Promise { + this.#ensureIsPersisted(user) + + const queryClient = await this.getDb() + const affectedRows = await queryClient + .query() + .from(this.table) + .where({ tokenable_id: user.$primaryKeyValue, type: this.type }) + .del() + .exec() + + return affectedRows as unknown as number + } + /** * Returns all the tokens for a given user * diff --git a/tests/access_tokens/token_providers/db.spec.ts b/tests/access_tokens/token_providers/db.spec.ts index cea726c..a1f0202 100644 --- a/tests/access_tokens/token_providers/db.spec.ts +++ b/tests/access_tokens/token_providers/db.spec.ts @@ -722,6 +722,43 @@ test.group('Access tokens provider | DB | all', () => { }) }) +test.group('Access tokens provider | DB | deleteAll', () => { + test('delete all tokens', async ({ assert }) => { + const db = await createDatabase() + await createTables(db) + + class User extends BaseModel { + @column({ isPrimary: true }) + declare id: number + + @column() + declare username: string + + @column() + declare email: string + + @column() + declare password: string + + static authTokens = DbAccessTokensProvider.forModel(User) + } + + const user = await User.create({ + email: 'virk@adonisjs.com', + username: 'virk', + password: 'secret', + }) + + await User.authTokens.create(user, ['*'], { expiresIn: '20 mins', name: 'List projects' }) + await User.authTokens.create(user) + timeTravel(21 * 60) + const numberOfDeletedTokens = await User.authTokens.deleteAll(user) + + assert.equal(numberOfDeletedTokens, 2) + assert.isEmpty(await User.authTokens.all(user)) + }) +}) + test.group('Access tokens provider | DB | invalidate', () => { test('delete token identified by publicly shared token', async ({ assert }) => { const db = await createDatabase() From 09391b3b26f6affa8ff74d58fc197341930984d9 Mon Sep 17 00:00:00 2001 From: Rasheed Rahman Date: Sun, 25 Jan 2026 20:57:22 +0000 Subject: [PATCH 2/2] fix: update delete method example to use deleteAll --- modules/access_tokens_guard/token_providers/db.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/access_tokens_guard/token_providers/db.ts b/modules/access_tokens_guard/token_providers/db.ts index e1586a0..1e78030 100644 --- a/modules/access_tokens_guard/token_providers/db.ts +++ b/modules/access_tokens_guard/token_providers/db.ts @@ -326,7 +326,7 @@ export class DbAccessTokensProvider< * @param user - The user instance to delete tokens for * * @example - * const deletedCount = await provider.delete(user) + * const deletedCount = await provider.deleteAll(user) * console.log('Deleted tokens:', deletedCount) */ async deleteAll(user: InstanceType): Promise {