Он восстанавливает файлы cookie пользователей с обновленными утверждениями. Если вы вызовете этот метод с другим пользователем, он выйдет из системы и войдет в систему переданного пользователя.
о довольно страшное происходит на моем сайте ASP.NET Core 2.1.0 MVC. В то время как я просматривал, внезапно это показывает, что я вошел в систему как другой пользователь (который также случайно просматривал сайт в то время).
Я не могу точно определить, есть ли конкретный вариант использования, который вызывает это, но это уже дважды происходило. Переход на другие страницы по-прежнему показывает, что я вошел как другой пользователь. Даже кажется, что я беру на себя претензии пользователя, которого я неправильно вошел как.
Мой вопрос:что могло бы сделать это?
РЕДАКТИРОВАТЬ: С тех пор я изменилсяuserManager
а такжеnotificationService
в «область действия», и эта проблема возникла снова, поэтому потенциальная проблема, о которой здесь сообщается, не может быть причиной.
Пытаясь разобраться в этом, я считаю, что виновником может быть следующий вызов в_Layout.cshtml
:
@inject UserManager<ApplicationUser> userManager
@inject NotificationService notificationService
@inject CommunityService communityService
@{
ApplicationUser user = await userManager.GetUserAsync( User );
}
Возвращенныйuser
используется для отображения информации о пользователе и выполнения вызововnotificationService
а такжеcommunityService
, Они также показывали данные, относящиеся к неправильному (не мне) пользователю.
Если это имеет значение, это какApplicationDbContext
настроен вStartup.cs
:
// Add framework services.
services
.AddDbContext<ApplicationDbContext>( options => options
.UseLazyLoadingProxies()
.UseSqlServer(_configuration.GetConnectionString( "DefaultConnection" ) ) );
services
.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
Я вспомнил, что«scoped» - это рекомендуемое время жизни для использования при регистрации Entity Framework для внедрения зависимостей., ОбеNotificationService
а такжеCommunityService
однако, зарегистрированы как «переходные» и запросApplicationDbContext
через конструктор для доступа к данным.
services.AddTransient<CommunityService, CommunityService>();
services.AddTransient<NotificationService, NotificationService>();
Может ли это иметь какое-либо отношение к этому? В настоящее время я не понимаю, может ли это иметь какое-либо значение. Я не могу воспроизвести эту проблему.