Fixed bug in user deletion where compare/exchange value wasn't deleted.
This commit is contained in:
@@ -19,10 +19,10 @@
|
||||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
|
||||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
|
||||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
|
||||
<Version>6.0.1</Version>
|
||||
<Version>6.0.2</Version>
|
||||
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
|
||||
<RootNamespace>Raven.Identity</RootNamespace>
|
||||
<PackageReleaseNotes>Compare/exchange to enforce unique emails cluster-wide, storing with email address as the key.</PackageReleaseNotes>
|
||||
<PackageReleaseNotes>Fixed user deletion that failed to delete compare/exchange key.</PackageReleaseNotes>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -192,11 +192,6 @@ namespace Raven.Identity
|
||||
ThrowIfNullDisposedCancelled(user, cancellationToken);
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
// Delete the user and save it. We must save it because deleting is a cluster-wide operation.
|
||||
// Only if the deletion succeeds will we remove the cluseter-wide compare/exchange key.
|
||||
this.DbSession.Delete(user);
|
||||
await this.DbSession.SaveChangesAsync();
|
||||
|
||||
// Remove the cluster-wide compare/exchange key.
|
||||
var deletionResult = await DeleteUserEmailReservation(user.Email);
|
||||
if (!deletionResult.Successful)
|
||||
@@ -211,6 +206,11 @@ namespace Raven.Identity
|
||||
});
|
||||
}
|
||||
|
||||
// Delete the user and save it. We must save it because deleting is a cluster-wide operation.
|
||||
// Only if the deletion succeeds will we remove the cluseter-wide compare/exchange key.
|
||||
this.DbSession.Delete(user);
|
||||
await this.DbSession.SaveChangesAsync();
|
||||
|
||||
return IdentityResult.Success;
|
||||
}
|
||||
|
||||
@@ -874,7 +874,15 @@ namespace Raven.Identity
|
||||
private Task<CompareExchangeResult<string>> DeleteUserEmailReservation(string email)
|
||||
{
|
||||
var key = GetCompareExchangeKeyFromEmail(email);
|
||||
var deleteEmailOperation = new DeleteCompareExchangeValueOperation<string>(key, 0);
|
||||
var store = DbSession.Advanced.DocumentStore;
|
||||
|
||||
var readResult = store.Operations.Send(new GetCompareExchangeValueOperation<string>(key));
|
||||
if (readResult == null)
|
||||
{
|
||||
return Task.FromResult(new CompareExchangeResult<string>() { Successful = false });
|
||||
}
|
||||
|
||||
var deleteEmailOperation = new DeleteCompareExchangeValueOperation<string>(key, readResult.Index);
|
||||
return DbSession.Advanced.DocumentStore.Operations.SendAsync(deleteEmailOperation);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user