public async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "") { CheckModelState(); var loginResult = await GetLoginResultAsync( loginModel.UsernameOrEmailAddress, loginModel.Password, loginModel.TenancyName ); await SignInAsync(loginResult.User, loginResult.Identity, loginModel.RememberMe); if (string.IsNullOrWhiteSpace(returnUrl)) { returnUrl = Request.ApplicationPath; } return Json(new MvcAjaxResponse { TargetUrl = returnUrl }); }
public async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "") { if (!ModelState.IsValid) { throw new UserFriendlyException("Your form is invalid!"); } var loginResult = await _userManager.LoginAsync( loginModel.UsernameOrEmailAddress, loginModel.Password, loginModel.TenancyName ); switch (loginResult.Result) { case AbpLoginResultType.Success: break; case AbpLoginResultType.InvalidUserNameOrEmailAddress: case AbpLoginResultType.InvalidPassword: throw new UserFriendlyException("Invalid user name or password!"); case AbpLoginResultType.InvalidTenancyName: throw new UserFriendlyException("No tenant with name: " + loginModel.TenancyName); case AbpLoginResultType.TenantIsNotActive: throw new UserFriendlyException("Tenant is not active: " + loginModel.TenancyName); case AbpLoginResultType.UserIsNotActive: throw new UserFriendlyException("User is not active: " + loginModel.UsernameOrEmailAddress); case AbpLoginResultType.UserEmailIsNotConfirmed: throw new UserFriendlyException("Your email address is not confirmed!"); default: //Can not fall to default for now. But other result types can be added in the future and we may forget to handle it throw new UserFriendlyException("Unknown problem with login: " + loginResult.Result); } AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = loginModel.RememberMe }, loginResult.Identity); if (string.IsNullOrWhiteSpace(returnUrl)) { returnUrl = Request.ApplicationPath; } return Json(new MvcAjaxResponse { TargetUrl = returnUrl }); }