¿Qué podría hacer que `UserManager` devuelva el usuario incorrecto?

Algo bastante aterrador está ocurriendo en mi sitio ASP.NET Core 2.1.0 MVC. Mientras navegaba, de repente muestra que he iniciado sesión como un usuario diferente (que también está navegando por el sitio en ese momento).

No puedo determinar si hay un caso de uso específico que desencadena esto, pero esto ha sucedido dos veces ahora. Navegar a otras páginas todavía muestra que estoy conectado como el otro usuario. Incluso parece que me hago cargo de las reclamaciones del usuario con el que inicié sesión incorrectamente.

Mi pregunta es: ¿Qué podría hacer que esto suceda?

EDITA: Desde entonces he cambiadouserManager ynotificationService a 'alcance' y este problema volvió a ocurrir, por lo tanto, el problema potencial informado aquí no puede ser la causa.

ntentando investigar esto, creo que el culpable podría ser la siguiente llamada en_Layout.cshtml:

@inject UserManager<ApplicationUser> userManager
@inject NotificationService notificationService
@inject CommunityService communityService
@{
    ApplicationUser user = await userManager.GetUserAsync( User );
}

El retornouser se utiliza para mostrar información del usuario y hacer llamadas anotificationService ycommunityService. Estos también mostraban datos pertenecientes al usuario incorrecto (no yo).

Si importa, así es comoApplicationDbContext está configurado enStartup.cs:

// Add framework services.
services
    .AddDbContext<ApplicationDbContext>( options => options
        .UseLazyLoadingProxies()
        .UseSqlServer(_configuration.GetConnectionString( "DefaultConnection" ) ) );
services
    .AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

Recordé que 'scoped' es la vida útil recomendada para usar cuando se registra Entity Framework para la inyección de dependencia. AmbosNotificationService yCommunityService, sin embargo, están registrados como 'transitorios' y solicitanApplicationDbContext a través de la inyección del constructor para acceder a los datos.

services.AddTransient<CommunityService, CommunityService>();
services.AddTransient<NotificationService, NotificationService>();

¿Podría esto tener algo que ver con eso? Actualmente, no entiendo si esto podría hacer alguna diferencia. Parece que no puedo replicar este problema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta