diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LoginController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs similarity index 60% rename from modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LoginController.cs rename to modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs index 8739481889..6cc2580643 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LoginController.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs @@ -1,12 +1,12 @@ using System; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Localization; using Volo.Abp.Account.Web.Areas.Account.Controllers.Models; -using Volo.Abp.Account.Web.Localization; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Identity; +using SignInResult = Microsoft.AspNetCore.Identity.SignInResult; using UserLoginInfo = Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo; namespace Volo.Abp.Account.Web.Areas.Account.Controllers @@ -15,44 +15,53 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers [Controller] [ControllerName("Login")] [Area("Account")] - [Route("api/account/login")] - public class LoginController : AbpController + [Route("api/account")] + public class AccountController : AbpController { private readonly SignInManager _signInManager; - public IStringLocalizer L { get; set; } - public string AspNetCoreIdentityCookieName = ".AspNetCore." + IdentityConstants.ApplicationScheme; + private readonly IdentityUserManager _userManager; - public LoginController(SignInManager signInManager) + public AccountController(SignInManager signInManager, IdentityUserManager userManager) { _signInManager = signInManager; + _userManager = userManager; } [HttpPost] - [Route("")] + [Route("login")] public virtual async Task Login(UserLoginInfo login) { - if (login == null) - { - throw new ArgumentException(nameof(login)); - } + ValidateLoginInfo(login); - if (login.UserNameOrEmailAddress.IsNullOrEmpty()) + return GetAbpLoginResult(await _signInManager.PasswordSignInAsync( + login.UserNameOrEmailAddress, + login.Password, + login.RememberMe, + true + )); + } + + [HttpPost] + [Route("checkPassword")] + public virtual async Task CheckPassword(UserLoginInfo login) + { + ValidateLoginInfo(login); + + try { - throw new ArgumentNullException(nameof(login.UserNameOrEmailAddress)); + IdentityUser identityUser = await _userManager.FindByNameAsync(login.UserNameOrEmailAddress); + return GetAbpLoginResult(await _signInManager.CheckPasswordSignInAsync(identityUser, login.Password, true)); } - - if (login.Password.IsNullOrEmpty()) + catch (Exception e) { - throw new ArgumentNullException(nameof(login.Password)); + Console.WriteLine(e); + throw; } - var result = await _signInManager.PasswordSignInAsync( - login.UserNameOrEmailAddress, - login.Password, - login.RememberMe, - true - ); + } + private static AbpLoginResult GetAbpLoginResult(SignInResult result) + { if (result.IsLockedOut) { return new AbpLoginResult(LoginResultType.LockedOut); @@ -73,31 +82,25 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers return new AbpLoginResult(LoginResultType.InvalidUserNameOrPassword); } - return new AbpLoginResult(LoginResultType.Success) - { - IdentityCookieToken = GetCookieValueFromResponse(AspNetCoreIdentityCookieName) - }; + return new AbpLoginResult(LoginResultType.Success); } - private string GetCookieValueFromResponse(string cookieName) + private void ValidateLoginInfo(UserLoginInfo login) { - foreach (var headers in Response.Headers.Values) + if (login == null) { - foreach (var header in headers) - { - if (!header.StartsWith($"{cookieName}=")) - { - continue; - } + throw new ArgumentException(nameof(login)); + } - var p1 = header.IndexOf('='); - var p2 = header.IndexOf(';'); - return header.Substring(p1 + 1, p2 - p1 - 1); - } + if (login.UserNameOrEmailAddress.IsNullOrEmpty()) + { + throw new ArgumentNullException(nameof(login.UserNameOrEmailAddress)); } - return null; + if (login.Password.IsNullOrEmpty()) + { + throw new ArgumentNullException(nameof(login.Password)); + } } - } } diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs index e1620ed342..5a5f517851 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs @@ -16,6 +16,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers _signInManager = signInManager; } + //todo@alper: this method can be moved to AccountController like "account/logout" public async Task Index() { await _signInManager.SignOutAsync(); diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/AbpLoginResult.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/AbpLoginResult.cs index 49aa5b0684..ebd9a4aa42 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/AbpLoginResult.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/AbpLoginResult.cs @@ -7,8 +7,6 @@ Result = result; } - public string IdentityCookieToken { get; set; } - public LoginResultType Result { get; } public string Description => Result.ToString(); diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/UserLoginInfo.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/UserLoginInfo.cs index a856157bc4..03231a0717 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/UserLoginInfo.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/Models/UserLoginInfo.cs @@ -1,4 +1,5 @@ -using System.ComponentModel.DataAnnotations; +using System; +using System.ComponentModel.DataAnnotations; namespace Volo.Abp.Account.Web.Areas.Account.Controllers.Models { @@ -14,5 +15,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers.Models public string Password { get; set; } public bool RememberMe { get; set; } + + public Guid? TenanId { get; set; } } } \ No newline at end of file