protected virtual void SaveLoginAttempt(JTLoginResult <TTenant, TUser> loginResult, string tenancyName, string userNameOrEmailAddress) { using (var uow = UnitOfWorkManager.Begin(TransactionScopeOption.Suppress)) { var tenantId = loginResult.Tenant != null ? loginResult.Tenant.Id : (int?)null; using (UnitOfWorkManager.Current.SetTenantId(tenantId)) { var loginAttempt = new JTUserLoginAttempt { TenantId = tenantId, TenancyName = tenancyName, UserId = loginResult.User != null ? loginResult.User.Id : (long?)null, UserNameOrEmailAddress = userNameOrEmailAddress, Result = loginResult.Result, BrowserInfo = ClientInfoProvider.BrowserInfo, ClientIpAddress = ClientInfoProvider.ClientIpAddress, ClientName = ClientInfoProvider.ComputerName, }; UserLoginAttemptRepository.Insert(loginAttempt); UnitOfWorkManager.Current.SaveChanges(); uow.Complete(); } } }
public virtual async Task <SignInResult> SignInOrTwoFactorAsync(JTLoginResult <TTenant, TUser> loginResult, bool isPersistent, bool?rememberBrowser = null, string loginProvider = null, bool bypassTwoFactor = false) { if (loginResult.Result != JTLoginResultType.Success) { throw new ArgumentException("loginResult.Result should be success in order to sign in!"); } using (_unitOfWorkManager.Current.SetTenantId(loginResult.Tenant?.Id)) { await UserManager.As <JTUserManager <TRole, TUser> >().InitializeOptionsAsync(loginResult.Tenant?.Id); if (!bypassTwoFactor && IsTrue(JTSettingNames.UserManagement.TwoFactorLogin.IsEnabled, loginResult.Tenant?.Id)) { if (await UserManager.GetTwoFactorEnabledAsync(loginResult.User)) { if ((await UserManager.GetValidTwoFactorProvidersAsync(loginResult.User)).Count > 0) { if (!await IsTwoFactorClientRememberedAsync(loginResult.User) || rememberBrowser == false) { await Context.SignInAsync( IdentityConstants.TwoFactorUserIdScheme, StoreTwoFactorInfo(loginResult.User, loginProvider) ); return(SignInResult.TwoFactorRequired); } } } } if (loginProvider != null) { await Context.SignOutAsync(IdentityConstants.ExternalScheme); } await SignInAsync(loginResult.User, isPersistent, loginProvider); return(SignInResult.Success); } }