diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs index 1abe7d774b..6e6582e047 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs @@ -47,7 +47,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase x.Id).ToArray(), cancellationToken: cancellationToken); await Repository.DeleteManyAsync(authorizations, autoSave: true, cancellationToken: cancellationToken); await uow.CompleteAsync(cancellationToken); } @@ -399,7 +400,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase> FindAsync(string subject, Guid client, CancellationToken cancellationToken = default); Task> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken = default); diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/EfCoreOpenIddictTokenRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/EfCoreOpenIddictTokenRepository.cs index 01dd8fbc7f..e9149b3fe3 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/EfCoreOpenIddictTokenRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/EfCoreOpenIddictTokenRepository.cs @@ -20,7 +20,7 @@ public class EfCoreOpenIddictTokenRepository : EfCoreRepository x.ApplicationId == applicationId) @@ -29,7 +29,7 @@ public class EfCoreOpenIddictTokenRepository : EfCoreRepository x.AuthorizationId == authorizationId) @@ -38,6 +38,15 @@ public class EfCoreOpenIddictTokenRepository : EfCoreRepository x.AuthorizationId != null && authorizationIds.Contains(x.AuthorizationId.Value)) + .ToListAsync(GetCancellationToken(cancellationToken)); + + await DeleteManyAsync(tokens, autoSave, GetCancellationToken(cancellationToken)); + } + public virtual async Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).Where(x => x.Subject == subject && x.ApplicationId == client).ToListAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs index 18d43a155e..90412f6aeb 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs @@ -19,8 +19,7 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository x.ApplicationId == applicationId) @@ -29,7 +28,7 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository x.AuthorizationId != null && authorizationIds.Contains(x.AuthorizationId.Value)) + .ToListAsync(GetCancellationToken(cancellationToken)); + + await DeleteManyAsync(tokens, autoSave, GetCancellationToken(cancellationToken)); + } + public virtual async Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Subject == subject && x.ApplicationId == client) @@ -100,7 +108,7 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken = default) + public virtual async Task> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken = default) { var authorizationIds = await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Status != OpenIddictConstants.Statuses.Valid) diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo/Abp/OpenIddict/OpenIddictTokenRepository_Tests.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo/Abp/OpenIddict/OpenIddictTokenRepository_Tests.cs index 4ed651eee6..958686618e 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo/Abp/OpenIddict/OpenIddictTokenRepository_Tests.cs +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo/Abp/OpenIddict/OpenIddictTokenRepository_Tests.cs @@ -25,17 +25,35 @@ public abstract class OpenIddictTokenRepository_Tests : OpenIddi { await _tokenRepository.DeleteManyByApplicationIdAsync(new Guid()); (await _tokenRepository.GetCountAsync()).ShouldBe(2); - + await _tokenRepository.DeleteManyByApplicationIdAsync(_testData.App1Id); (await _tokenRepository.GetCountAsync()).ShouldBe(1); } + [Fact] + public async Task DeleteManyByAuthorizationIdsAsync() + { + await _tokenRepository.DeleteManyByAuthorizationIdsAsync(new Guid[] + { + Guid.NewGuid(), + Guid.NewGuid(), + }); + (await _tokenRepository.GetCountAsync()).ShouldBe(2); + + await _tokenRepository.DeleteManyByAuthorizationIdsAsync(new Guid[] + { + _testData.Authorization1Id, + _testData.Authorization2Id + }); + (await _tokenRepository.GetCountAsync()).ShouldBe(0); + } + [Fact] public async Task DeleteManyByAuthorizationIdAsync() { await _tokenRepository.DeleteManyByAuthorizationIdAsync(new Guid()); (await _tokenRepository.GetCountAsync()).ShouldBe(2); - + await _tokenRepository.DeleteManyByAuthorizationIdAsync(_testData.Authorization1Id); (await _tokenRepository.GetCountAsync()).ShouldBe(1); } @@ -87,7 +105,7 @@ public abstract class OpenIddictTokenRepository_Tests : OpenIddi { (await _tokenRepository.FindBySubjectAsync("TestSubject1")).Count.ShouldBe(1); } - + [Fact] public async Task ListAsync() { @@ -101,4 +119,4 @@ public abstract class OpenIddictTokenRepository_Tests : OpenIddi var threshold = DateTime.UtcNow - TimeSpan.FromDays(14); (await _tokenRepository.GetPruneListAsync(threshold, int.MaxValue)).Count.ShouldBe(1); } -} \ No newline at end of file +}