Skip to content

ConcurencyFailure at SetAuthenticationTokenAsync #73

@IgorMenshikov

Description

@IgorMenshikov

My NETCore 8 app. It works with Posgress database and has the code:

        var userManager = instance of UserManager<IdentityUser>
        var user = await userManager.FindByEmailAsync(parameters.Email);

        var resetCode = await userManager.GeneratePasswordResetTokenAsync(user);
        var result = userManager.SetAuthenticationTokenAsync(user, "demo", "demo", resetCode);

SetAuthenticationTokenAsync returns ConcurencyFailure in some random situations.

I have checked application logs. In normal situations it is like:

Executed DbCommand (8ms) [Parameters=[@p1='?', @p2='?', @p3='?', @p0='?', @p18='?', @p4='?' (DbType = Int32), @p5='?', @p19='?', @p6='?', @p7='?' (DbType = Boolean), @p8='?' (DbType = Boolean), @p9='?' (DbType = DateTimeOffset), @p10='?', @p11='?', @p12='?', @p13='?', @p14='?' (DbType = Boolean), @p15='?', @p16='?' (DbType = Boolean), @p17='?'], CommandType='Text', CommandTimeout='30']
2024-09-10T18:18:58.8912872Z       UPDATE "AspNetUserTokens" SET "Value" = @p0
2024-09-10T18:18:58.8912915Z       WHERE "LoginProvider" = @p1 AND "Name" = @p2 AND "UserId" = @p3;
2024-09-10T18:18:58.8912973Z       UPDATE "AspNetUsers" SET "AccessFailedCount" = @p4, "ConcurrencyStamp" = @p5, "Email" = @p6, "EmailConfirmed" = @p7, "LockoutEnabled" = @p8, "LockoutEnd" = @p9, "NormalizedEmail" = @p10, "NormalizedUserName" = @p11, "PasswordHash" = @p12, "PhoneNumber" = @p13, "PhoneNumberConfirmed" = @p14, "SecurityStamp" = @p15, "TwoFactorEnabled" = @p16, "UserName" = @p17
2024-09-10T18:18:58.8913009Z       WHERE "Id" = @p18 AND "ConcurrencyStamp" = @p19;

If the calls fails, I see two AspNetUsers updates for some reason:

2024-09-10T18:05:47.3729525Z info: Microsoft.EntityFrameworkCore.Database.Command[20101]
2024-09-10T18:05:47.3733480Z       Executed DbCommand (9ms) [Parameters=[@p1='?', @p2='?', @p3='?', @p0='?', @p18='?', @p4='?' (DbType = Int32), @p5='?', @p19='?', @p6='?', @p7='?' (DbType = Boolean), @p8='?' (DbType = Boolean), @p9='?' (DbType = DateTimeOffset), @p10='?', @p11='?', @p12='?', @p13='?', @p14='?' (DbType = Boolean), @p15='?', @p16='?' (DbType = Boolean), @p17='?', @p34='?', @p20='?' (DbType = Int32), @p21='?', @p35='?', @p22='?', @p23='?' (DbType = Boolean), @p24='?' (DbType = Boolean), @p25='?' (DbType = DateTimeOffset), @p26='?', @p27='?', @p28='?', @p29='?', @p30='?' (DbType = Boolean), @p31='?', @p32='?' (DbType = Boolean), @p33='?'], CommandType='Text', CommandTimeout='30']
2024-09-10T18:05:47.3733562Z       UPDATE "AspNetUserTokens" SET "Value" = @p0
2024-09-10T18:05:47.3733602Z       WHERE "LoginProvider" = @p1 AND "Name" = @p2 AND "UserId" = @p3;
2024-09-10T18:05:47.3733658Z       UPDATE "AspNetUsers" SET "AccessFailedCount" = @p4, "ConcurrencyStamp" = @p5, "Email" = @p6, "EmailConfirmed" = @p7, "LockoutEnabled" = @p8, "LockoutEnd" = @p9, "NormalizedEmail" = @p10, "NormalizedUserName" = @p11, "PasswordHash" = @p12, "PhoneNumber" = @p13, "PhoneNumberConfirmed" = @p14, "SecurityStamp" = @p15, "TwoFactorEnabled" = @p16, "UserName" = @p17
2024-09-10T18:05:47.3733695Z       WHERE "Id" = @p18 AND "ConcurrencyStamp" = @p19;
2024-09-10T18:05:47.3733766Z       UPDATE "AspNetUsers" SET "AccessFailedCount" = @p20, "ConcurrencyStamp" = @p21, "Email" = @p22, "EmailConfirmed" = @p23, "LockoutEnabled" = @p24, "LockoutEnd" = @p25, "NormalizedEmail" = @p26, "NormalizedUserName" = @p27, "PasswordHash" = @p28, "PhoneNumber" = @p29, "PhoneNumberConfirmed" = @p30, "SecurityStamp" = @p31, "TwoFactorEnabled" = @p32, "UserName" = @p33
2024-09-10T18:05:47.3733803Z       WHERE "Id" = @p34 AND "ConcurrencyStamp" = @p35;

For sure the second update fails but I cannot understand library executes it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions