public override async Task <SignInResult> PasswordSignInAsync(TUser user, string password, bool isPersistent, bool lockoutOnFailure) { var result = await base.PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure); var appUser = user as IdentityUser; if (appUser != null) // We can only log an audit record if we can access the user object and it's ID { var ip = _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString(); UserAudit auditRecord = null; switch (result.ToString()) { case "Succeeded": auditRecord = UserAudit.CreateAuditEvent(appUser.Id, UserAuditEventType.Login, ip); break; case "Failed": auditRecord = UserAudit.CreateAuditEvent(appUser.Id, UserAuditEventType.FailedLogin, ip); break; } if (auditRecord != null) { _db.UserAuditEvents.Add(auditRecord); await _db.SaveChangesAsync(); } } return(result); }
public async Task RaiseAsync(Event evt) { if (evt.Name.Contains("Login")) { if (evt.EventType == EventTypes.Success) { UserLoginSuccessEvent successEvent = evt as UserLoginSuccessEvent; UserAudit user = UserAudit.CreateAuditEvent(successEvent.SubjectId.ToString(), successEvent.Username, successEvent.DisplayName, successEvent.Name, successEvent.Id.ToString(), evt.EventType.ToString(), evt.RemoteIpAddress); await _context.UserAuditEvents.AddAsync(user); await _context.SaveChangesAsync(); } else { UserLoginFailureEvent failEvent = evt as UserLoginFailureEvent; UserAudit user = UserAudit.CreateAuditEvent(failEvent.Username.ToString(), failEvent.Id.ToString(), failEvent.Name, failEvent.EventType.ToString(), evt.RemoteIpAddress); await _context.UserAuditEvents.AddAsync(user); await _context.SaveChangesAsync(); } } else if (evt.Name.Contains("Logout")) { UserLogoutSuccessEvent failEvent = evt as UserLogoutSuccessEvent; UserAudit user = UserAudit.CreateAuditEvent(failEvent.SubjectId.ToString(), failEvent.DisplayName, failEvent.DisplayName, failEvent.Name, failEvent.Id.ToString(), evt.EventType.ToString(), evt.RemoteIpAddress); await _context.UserAuditEvents.AddAsync(user); await _context.SaveChangesAsync(); } }
public override async Task SignOutAsync() { await base.SignOutAsync(); var user = await _userManager.FindByIdAsync(_userManager.GetUserId(_contextAccessor.HttpContext.User)) as IdentityUser; if (user != null) { var ip = _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString(); var auditRecord = UserAudit.CreateAuditEvent(user.Id, UserAuditEventType.LogOut, ip); _db.UserAuditEvents.Add(auditRecord); await _db.SaveChangesAsync(); } }