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);
        }
Ejemplo n.º 2
0
        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();
            }
        }